Czy są jakieś różnice w wywoływaniu zmiennych ze składnią ${var}
i $(var)
? Na przykład, w jaki sposób zmienna zostanie rozwinięta, czy coś?
111
Nie ma różnicy - mają na myśli dokładnie to samo (w GNU Make i POSIX make).
Myślę, że $(round brackets)
wygląda to bardziej schludnie, ale to tylko osobiste preferencje.
(Inne odpowiedzi wskazują na odpowiednie sekcje dokumentacji GNU Make i zauważ, że nie powinieneś mieszać składni w jednym wyrażeniu)
$()
make, aby uniknąć pomieszania (większego niż już istnieje) między zmiennymi make i shell. GNU Tworzy dokumentację dotyczącą odwołań do zmiennych .deploy: ${DEPS}
jako błąd składniowy, ale pokazanydeploy: $(DEPS)
jako poprawny, mimo że obie pisownie mają ten sam efekt po wywołaniumake
.W sekcji Podstawy odwołań do zmiennych w
GNU make
dokumentacji nie podano żadnych różnic :źródło
Jak już słusznie wskazano, nie ma różnicy, ale uważaj, aby nie mieszać dwóch rodzajów separatorów, ponieważ może to prowadzić do tajemniczych błędów, takich jak unomadh GNU make.
Z podręcznika GNU make na temat składni wywołania funkcji (moje wyróżnienie):
źródło
W rzeczywistości wydaje się być całkiem inny:
wyjścia
Ale jak dotąd zauważyłem tę różnicę tylko wtedy, gdy nazwa zmiennej w $ {...} zawiera w sobie przecinek. Na początku myślałem, że $ {...} rozszerza przecinek nie jako część wartości, ale okazuje się, że nie jestem w stanie tego zhakować w ten sposób. Nadal tego nie rozumiem ... Gdyby ktoś miał wyjaśnienie, byłbym szczęśliwy, gdyby się dowiedział!
źródło
Styl $ {} pozwala przetestować reguły make w powłoce, jeśli masz ustawione odpowiednie zmienne środowiskowe, ponieważ jest to zgodne z bash.
źródło
Ma znaczenie, jeśli wyrażenie zawiera niezrównoważone nawiasy:
->
W przypadku odwołań do zmiennych ma to znaczenie dla funkcji lub nazw zmiennych zawierających nawiasy (zły pomysł)
źródło