Kommando-Substitutionen

Aus Xinux Wiki
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).