Есть ли различия в вызове переменных с синтаксисом ${var}
и $(var)
? Например, как переменная будет расширяться или что-то в этом роде?
111
Нет никакой разницы - они означают одно и то же (в GNU Make и в POSIX make).
я так думаю $(round brackets)
выглядит аккуратнее, но это только личные предпочтения.
(Другие ответы указывают на соответствующие разделы документации GNU Make и обратите внимание, что вы не должны смешивать синтаксисы в одном выражении)
$()
in make, чтобы не вызывать у себя путаницы (большей, чем уже существует) между переменными make и оболочки. GNU Make документация по ссылкам на переменные .deploy: ${DEPS}
для меня как синтаксическая ошибка, но отображаетсяdeploy: $(DEPS)
как правильная, хотя оба написания имеют одинаковый эффект при вызовеmake
.В разделе " Основы ссылок на переменные "
GNU make
документации не указано никаких различий :источник
Как уже было правильно указано, нет никакой разницы, но будьте осторожны, чтобы не смешивать два типа разделителей, поскольку это может привести к загадочным ошибкам, таким как unomadh GNU make.
Из руководства GNU make по синтаксису вызова функций (выделено мной):
источник
На самом деле, вроде бы все иначе:
выходы
Но до сих пор я обнаружил эту разницу только тогда, когда имя переменной в $ {...} содержит запятую. Сначала я подумал, что $ {...} расширяет запятую не как часть значения, но оказалось, что я не могу взломать его таким образом. Я до сих пор этого не понимаю ... Если бы у кого-то были объяснения, я был бы рад узнать!
источник
Стиль $ {} позволяет тестировать правила make в оболочке, если у вас установлены соответствующие переменные среды, поскольку это совместимо с bash.
источник
Имеет значение, если выражение содержит несбалансированные скобки:
->
Для ссылок на переменные это имеет значение для функций или для имен переменных, содержащих скобки (плохая идея).
источник