Kommando-Substitutionen
Zur Navigation springen
Zur Suche springen
Kommandosubstitution
- Die Kommandosubstitution ermöglicht es, die Ausgabe eines Befehls als Eingabe für einen anderen Befehl zu verwenden.
- Dadurch können Ergebnisse von Kommandos direkt in Variablen gespeichert oder in andere Befehle eingebettet werden.
- Die Shell ersetzt dabei den Ausdruck durch das Ergebnis des ausgeführten Befehls.
- Allgemeine Funktionsweise
- Der Befehl innerhalb der Substitution wird zuerst ausgeführt.
- Das Ergebnis (die Standardausgabe) ersetzt dann die gesamte Substitution.
- Die Kommandosubstitution kann in der Befehlszeile oder in Skripten verwendet werden.
Varianten der Kommandosubstitution
- Moderne Schreibweise
- $(Befehl)
Diese Variante ist klarer lesbar, unterstützt Schachtelung und ist in modernen Skripten empfohlen.
- Ältere Schreibweise
- `Befehl`
Diese Variante verwendet Backticks und ist schwerer zu verschachteln, funktioniert aber weiterhin aus Kompatibilitätsgründen.
Beispiele
- Einfaches Beispiel
- echo "Heute ist $(date)"
Heute ist Fri Oct 17 17:45:12 CEST 2025
- Zuweisung an eine Variable
- MOMENT=$(date +%T)
- echo $MOMENT
17:45:12
- Kommandos in Kombination
- cd $(echo /home/$(whoami))
wechselt ins Home-Verzeichnis des aktuellen Benutzers
- Ältere Schreibweise mit Backticks
- MOMENT=`date +%T`
- echo $MOMENT
17:45:12
Verschachtelung
- Die moderne Variante erlaubt Schachtelungen, bei denen eine Kommandosubstitution innerhalb einer anderen verwendet wird.
- Beispiel
- echo "Hostname: $(hostname), IP: $(hostname -I | awk '{print $1}')"
Hostname: orville, IP: 192.168.1.10
Hinweise
- Die moderne Schreibweise $(...) ist der älteren Variante mit Backticks vorzuziehen.
- Backticks (`...`) können leicht mit Apostrophen verwechselt werden und lassen sich schwer schachteln.
- Die Kommandosubstitution ersetzt den Befehl durch seine Ausgabe – nicht durch den Exit-Status.
- Sie wird von der Shell ausgewertet, bevor der eigentliche Befehl ausgeführt wird.
Aufgaben
Einfache Kommandosubstitution
- Erstellen Sie eine Variable ZEIT, die die aktuelle Uhrzeit enthält, und geben Sie sie aus.
- Erstellen Sie eine Variable BENUTZER, die den Rückgabewert von whoami enthält, und geben Sie diesen aus.
Verwendung in Befehlen
- Verwenden Sie die Kommandosubstitution, um direkt in Ihr Home-Verzeichnis zu wechseln.
- Erzeugen Sie ein Verzeichnis mit Ihrem Benutzernamen als Namen über $(whoami).
Schachtelung
- Erstellen Sie einen Befehl, der sowohl den Hostnamen als auch das aktuelle Datum in einer Zeile ausgibt.
- Verwenden Sie dazu eine verschachtelte Kommandosubstitution mit $(hostname) und $(date +%F).