Gibt es Unterschiede beim Aufrufen von Variablen mit Syntax ${var}
und $(var)
? Zum Beispiel, wie die Variable erweitert wird oder so?
110
Es gibt keinen Unterschied - sie bedeuten genau dasselbe (in GNU Make und in POSIX make).
Ich denke, das $(round brackets)
sieht ordentlicher aus, aber das ist nur eine persönliche Präferenz.
(Andere Antworten verweisen auf die relevanten Abschnitte der GNU Make-Dokumentation und beachten Sie, dass Sie die Syntax nicht in einem einzigen Ausdruck mischen sollten.)
$()
in make, um zu vermeiden, dass ich (mehr als bereits vorhanden) Verwechslungen zwischen make- und Shell-Variablen verursache. GNU Dokumentation zu Variablenreferenzen erstellen .deploy: ${DEPS}
für mich als Syntaxfehler hervorgehoben, aberdeploy: $(DEPS)
als korrekt angezeigt, obwohl beide Schreibweisen beim Aufrufen den gleichen Effekt habenmake
.Im Abschnitt Grundlagen variabler Referenzen aus der
GNU make
Dokumentation werden keine Unterschiede angegeben :quelle
Wie bereits richtig ausgeführt, gibt es keinen Unterschied, aber seien Sie vorsichtig, die beiden Arten von Trennzeichen nicht zu mischen, da dies zu kryptischen Fehlern führen kann, wie sie beispielsweise bei unomadh GNU auftreten.
Machen Sie aus der GNU ein Handbuch zur Funktionsaufrufsyntax (Hervorhebung von mir):
quelle
Eigentlich scheint es ziemlich anders zu sein:
Ausgänge
Bisher habe ich diesen Unterschied jedoch nur festgestellt, wenn der Variablenname in $ {...} selbst ein Komma enthält. Ich dachte zuerst, $ {...} würde das Komma nicht als Teil des Wertes erweitern, aber es stellt sich heraus, dass ich es nicht auf diese Weise hacken kann. Ich verstehe das immer noch nicht ... Wenn jemand eine Erklärung hätte, würde ich mich freuen zu wissen!
quelle
Mit dem $ {} -Stil können Sie die make-Regeln in der Shell testen, wenn Sie die entsprechenden Umgebungsvariablen festgelegt haben, da dies mit bash kompatibel ist.
quelle
Es macht einen Unterschied, ob der Ausdruck unausgeglichene Klammern enthält:
->
Bei Variablenreferenzen macht dies einen Unterschied für Funktionen oder für Variablennamen, die Klammern enthalten (schlechte Idee).
quelle