Antworten:
Es ist den Backticks `` sehr ähnlich.
Es heißt Befehlssubstitution ( Posix-Spezifikation ) und ruft eine Subshell auf. Der Befehl in Klammern $()
oder zwischen den Backticks (``) wird in einer Subshell ausgeführt und die Ausgabe wird dann in den ursprünglichen Befehl eingefügt.
Im Gegensatz zu den Backticks kann das $(...)
Formular verschachtelt werden. So können Sie die Befehlsersetzung in einer anderen Ersetzung verwenden.
Es gibt auch Unterschiede bei den maskierten Zeichen innerhalb der Substitution. Ich bevorzuge die $(...)
Form.
echo `echo \`echo foo\`` bar
In POSIX oder POSIX artigen Schalen ( ksh
, bash
, ash
, zsh
, yash
...), ist es wie ``
: der Befehl im Innern $()
wird durch die Standardausgabe ausgeführt und ersetzt werden . Das Aufteilen von Wörtern und das Generieren von Dateinamen werden durchgeführt, sofern sie nicht $()
in doppelten Anführungszeichen stehen. Somit
chmod 777 $(pwd)
sollte ersetzt werden durch:
chmod 777 "$(pwd)"
um das Teilen von Wörtern und die Generierung von Dateinamen im aktuellen Arbeitsverzeichnis zu vermeiden.
Oder noch besser (außer unter einigen Shells, wie zsh, falls das Verzeichnis umbenannt wurde):
chmod 777 "$PWD"
Since $PWD
ist eine spezielle Variable, die den Pfad zum aktuellen Arbeitsverzeichnis in POSIX-Shells enthält.
Oder noch besser:
chmod 777 .
Da der .
Eintrag im aktuellen Verzeichnis ein fester Link zu diesem Verzeichnis selbst ist.
Dies $()
wird zum Ausführen eines Befehls verwendet, der sich hauptsächlich in einem anderen Befehl befindet.
chmod 777 $(pwd)
pwd
Befehl gibt das aktuelle Arbeitsverzeichnis an. Wenn also das Ganze ausgeführt wird, wird die Ausgabe von pwd seine Position ersetzen und als Argument dafür dienen chmod
, und das Ergebnis ist, dass Ihr gesamtes aktuelles Arbeitsverzeichnis die Erlaubnis erhält, 777
die ich denke, niemals in einer Produktionsumgebung verwendet werden sollte;).