Ich gehe davon aus, dass Sie $(CC)
gesehen haben in einem Makefile, wo es als Erweiterung der Variablen CC
dient , die normalerweise den Namen des C-Compilers enthält. Die $(...)
Syntax für Variablenerweiterungen in Makefiles wird immer dann verwendet, wenn eine Variable mit einem aus mehreren Zeichen bestehenden Namen erweitert wird, als $CC
würde ansonsten auf den Wert der Variablen C
expandieren gefolgt von einem wörtlichen C
($CC
wäre tatsächlich dasselbe wie $(C)C
in einem Makefile).
In der Shell jedoch, aufgrund einer anderen Syntax, $(CC)
ist eine Befehlsersetzung, die durch die Ausgabe des Befehls CC
ersetzt würde . Wenn auf Ihrem System kein solcher Befehl vorhanden ist, wird der Fehler "Befehl nicht gefunden" angezeigt.
Es ist auch möglich, dass Sie $(CC)
falsch eingegeben haben für ${CC}
was in der Shell äquivalent zu $CC
ist unter den meisten Umständen. Die geschweiften Klammern werden nur benötigt, wenn die Expansion der Variablen unmittelbar erfolgt durch eine andere Zeichenfolge, die sonst als Teil des Variablennamens interpretiert würde. Ein Beispiel für den Unterschied ist in "$CC_hello"
zu sehen (erweitert die Variable namens CC_hello
) und "${CC}_hello"
(erweitert die Variable CC
und hängt die Zeichenfolge _hello
an zu seinem Wert). Unter allen anderen Umständen ${CC}
entspricht $CC
. Beachten Sie, dass die Verwendung von geschweiften Klammern nicht ist die Erweiterung angeben, also ${CC}
ist nicht dasselbe wie "$CC"
.
Wenn Sie eine Shell- oder Umgebungsvariable haben, die den Namen des Compilers enthält, den Sie zum Kompilieren von C-Code verwenden, und Sie diese Variable in der Befehlszeile verwenden möchten, verwenden Sie "$CC"
, oder einfach nur $CC
wenn der Wert der Variablen keine Leerzeichen oder Shell-Globbing-Zeichen enthält.
$CC -o hello.elf hello.c
Die beiden sind nicht gleichwertig. In einer Zeile, die $(foo)
enthält , der $(foo)
wird durch die Ausgabe des Befehls foo
ersetzt . Zum Beispiel:
$ echo "hello $(echo world)"
hello world
In einer Zeile, die $foo
enthält , der $foo
wird durch den Wert der Variablen mit dem Namen foo
ersetzt . Zum Beispiel:
$ foo=world
$ echo "hello $foo"
hello world