Bash/Kommandosubstitution
Die Kommandosubstitution erlaubt das Ersetzen ihres Aufrufes durch ihre Ausgabe. Es existieren zwei Syntaxvarianten des Aufrufs:
$(Kommando) `Kommando`
Die Bash führt das Kommando aus und ersetzt seinen Aufruf auf der Kommandozeile durch dessen Ausgabe, wobei abschließende Zeilenendezeichen entfernt wurden.
# ohne Kommandosubstitution find / -name "whatis" 2>/dev/null | ls -l | head -5 insgesamt 15888 -rw-r--r-- 1 user users 787067 Apr 1 09:02 Buch.tar.gz drwxr-xr-x 4 user users 4096 Jan 16 19:49 Dhtml drwx------ 5 user users 4096 Apr 26 09:48 Desktop drwxr-xr-x 4 user users 4096 Apr 21 08:43 IGLinux # mit Kommandosubstitution ls -l $(find / -name "whatis" 2>/dev/null) ls -l $(find / -name "whatis" 2>/dev/null) -rw-r--r-- 1 root root 94414 Jun 13 18:34 /usr/X11R6/man/whatis -rw-r--r-- 1 root root 792270 Jun 13 18:34 /usr/man/allman/whatis -rw-r--r-- 1 root root 220874 Jun 13 18:34 /usr/man/whatis -rw-r--r-- 1 root root 0 Jun 13 18:34 /usr/openwin/man/whatis
Eine solche Kommandosubstitution kann auch bei der Zuweisung an eine Variable angewandt werden:
AktuellPfad=$(pwd) echo $AktuellerPfad /home/user
Zwischen Backquote (Accent Grave) gesetzte Kommandos werden ausgeführt und das Ergebnis wird dann als Parameter übergeben (d. h. die Ausgabe des Kommandos landet als Parameter in der Kommandozeile). Dabei werden Zeilenwechsel zu Leerzeichen. Braucht dieses Kommando Parameter, tritt die normale Parameterersetzung in Kraft. Zum Beispiel
echo "Aktuelles Verzeichnis: `pwd`"
Weil die verschiedenen Quotes manchmal schwer zu unterscheiden sind, wurde bei der bash eine weitere Möglichkeit eingeführt. Statt in Backquotes wird die Kommandofolge in $(...) eingeschlossen., z. B. :
echo "Aktuelles Verzeichnis: $(pwd)"
Command substitution allows the output of a command to replace the command itself. Command substitution occurs when a command is enclosed like this:
$(command) or like this using backticks: `command`
Bash performs the expansion by executing COMMAND and replacing the command substitution with the standard output of the command, with any trailing newlines deleted.
Embedded newlines are not deleted, but they may be removed during word splitting.
echo `date` Thu Feb 6 10:06:20 CET 2003
When the old-style backquoted (accent aigu) form of substitution is used, backslash retains its literal meaning except when followed by "$", "`", or "\".
The first backticks not preceded by a backslash terminates the command substitution.
When using the "$(COMMAND)" form, all characters between the parentheses make up the command; none are treated specially.
Command substitutions may be nested. To nest when using the backquoted form, escape the inner backticks with backslashes.
If the substitution appears within double quotes, word splitting and file name expansion are not performed on the results.