Beachten Sie, dass es den Befehl line shell nicht gibt . Es gibt eine Reihe von Shell-Anwendungen für Linux.
Stéphane Chazelas
Antworten:
21
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.
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 $PWDist 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)
pwdBefehl 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, 777die ich denke, niemals in einer Produktionsumgebung verwendet werden sollte;).
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.quelle
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. Somitsollte ersetzt werden durch:
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):
Since
$PWD
ist eine spezielle Variable, die den Pfad zum aktuellen Arbeitsverzeichnis in POSIX-Shells enthält.Oder noch besser:
Da der
.
Eintrag im aktuellen Verzeichnis ein fester Link zu diesem Verzeichnis selbst ist.quelle
Dies
$()
wird zum Ausführen eines Befehls verwendet, der sich hauptsächlich in einem anderen Befehl befindet.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 dienenchmod
, und das Ergebnis ist, dass Ihr gesamtes aktuelles Arbeitsverzeichnis die Erlaubnis erhält,777
die ich denke, niemals in einer Produktionsumgebung verwendet werden sollte;).quelle