bash: Parametersubstitution

Unter dem Begriff der Parametersubstitution stellt die bash einige Kommandos zur Verfügung, die die Bearbeitung von Zeichenketten in Variablen ermöglichen. Die Syntax hierfür lautet in der Regel ${var__muster}, wobei __ für ein bis zwei Sonderzeichen steht, die die Bearbeitung näher spezifizieren. Zu beachten ist, dass die Variable var ohne vorangestelltes Dollarzeichen ($) angesprochen werden, außer wenn Vergleichsmuster aus einer Variablen gelesen werden sollen.

In der nachfolgenden Tabelle sind die möglichen Parametersubstitutionen aufgeführt:

Syntax Bedeutung
${var:-default} Wenn die Variable var leer ist, liefert die Konstruktion die Defaulteinstellung default als Ergebnis, anderfalls den Inhalt der Variablen. Die Variable wird nicht verändert.
${var:=default} Wie oben, es wird aber gleichzeitig der Inhalt der Variablen var geändert, wenn diese bisher leer war.
${var:+neu} Wenn die Variable var leer ist, wird sie nicht verändert. Wenn die Variable dagegen bereitsbelegt ist, wird der bisherige Inhalt durch eine neue Einstellung neu ersetzt. Die Konstruktion liefert den neuen Inhalt der Variablen.
${var:?fehlermeldung} Wenn die Variable var leer ist, wird der Variablenname und die Fehlermeldung fehlermeldung ausgegeben und das Shell-Programm anschließend beendet. Andernfalls liefert die Konstruktion den Inhalt der Variablen.
${#var} Liefert die Anzahl der in der Variablen var gespeicherten Zeichen als Ergebnis, die Variable wird nicht verändert.
${var#muster} Vergleicht den Anfang der Variablen var mit dem angegebenen Muster muster. Wenn das Muster erkannt wird, liefert die Konstruktion den Inhalt der Variablen abzüglich des kürzestmöglichen Textes, der dem Suchmuster entspricht. Wird das Muster dagegen nicht gefunden, wird der ganze Inhalt der Variablen zurückgegeben. Im Suchmuster können die zur Bildung von Dateinamen bekannten Jokerzeichen verwendet werden. Die Variable wird in keinem Fall verändert.
${var##muster} Wie oben, allerdings wird jetzt die größtmögliche Zeichenkette, die dem Muster entspricht, eliminiert.
${var%muster} Wie ${var#muster}, allerdings erfolgt der Mustervergleich jetzt am Ende des Variableninhalts. Es wird die kürzest mögliche Zeichenkette vom Ende der Variablen eliminiert. Die Variable selbst bleibt unverändert.
${var%%muster} Wie oben, allerdings wird die größtmögliche Zeichenkette eliminiert.
${!var} Liefert den Inhalt der Variablen, dessen Name in var als Zeichenkette enthalten ist.