Mittwoch, 23. Februar 2011

Shellskript Programmierung - Teil 6 (Kommandosubstitution)

Eines der mächtigsten Feature der bash ist die Kommandosubstitution. Im sechsten Teil dieser Kurzeinführungen soll es um genau dieses Thema gehen.

(Date/Datum: 080302-19:32, Hits: 2465)

Im Normalfall führt man Kommandos aus und kann anschließend deren Ergebnisse betrachten oder leitet deren Ausgabe vielleicht durch eine Pipe an ein anderes Programm weiter.

Bei der Kommandosubstitution ist das anders. Bei dieser wird ein Unterkommando in Backticks (`-Zeichen) gesetzt. Dies bewirkt, dass die Ausgabe des Kommandos als Parameter für ein anderes Kommando benutzt wird.

Ein einfaches Beispiel

Dieses Beispiel ist etwas unsinnig, für den Einstieg wird es allerdings gute Dienste leisten. Und zwar soll die Ausgabe des ls-Programms benutzt werden, um Dateinamen aufzulisten. Die Auflistung der Dateinamen soll aber das echo-Programm übernehmen, das die Ausgabe von ls als Parameter geliefert bekommen soll.

Dies ist möglich, weil das echo-Programm das, was man ihm als Parameter angibt (einmal abgesehen von einigen speziellen Parametern) auf der Standardausgabe ausgibt. Und da es nun die Ausgabe von ls (also die Dateinamen) als Parameter geliefert bekommt, gibt es diese einfach aus.

Es ist hier zu beachten, dass das ls-Kommando in Backticks geschrieben steht:

$ echo `ls`
a b c d e f

Datum in echo-Ausgabe einbauen

Ein typischer Anwendungsfall für die Kommandosubstitution ist die Ausgabe des Datums innerhalb eines Texts mit echo. Die Syntax ist hierbei gleich:

$ echo "Heute ist der `date`".
Heute ist der So 2. Mär 19:29:06 CET 2008

Ein netteres Beispiel

Richtig nützlich wird die Kommandosubstitution aber erst dann, wenn Variablen (vgl. Teil 4) mit ins Spiel kommen. Variablen können nämlich die Ausgabe einer Kommandosubstitution als Werte annehmen.

So ist es etwa möglich, die Ausgabe von ls als Variablenwert zwischenzuspeichern. Um dies zu verdeutlichen soll nun die Ausgabe von ls zunächst in einer Variablen zwischengespeichert und dann durch echo ausgegeben werden.

$ DATEIEN=`ls`
$ echo $DATEIEN
a b c d e f

Mehr dazu findet man in Einstieg in Linux und in Linux. Das umfassende Handbuch.

Keine Kommentare:

Kommentar veröffentlichen