Grundsätzlich gilt für die Shellvariablen innerhalb eines Scripts genau das, was schon vorher bei der Shell als Benutzeroberfläche gesagt wurde. Innerhalb eines Scripts werden neben den später beschriebenen Kommandozeilenparameter-Variablen auch häufig spezielle Arten von sogenannter Variablen-Wertersetzung benutzt. Selbstverständlich funktionieren diese Wertersetzungen auch außerhalb von Scripts, nur finden sie da selten eine vernünftige Anwendung.

Die folgenden Wertersetzungen werden von der bash unterstützt:

${Variablenname}

Die Variable wird genauso ausgewertet, wie ohne die geschweiften Klammern. Vorteil dieser Form ist es, dass Doppeldeutigkeiten aufgehoben werden, wenn z.B. in einem Ausgabebefehl direkt auf die Variable weiterer Text folgen soll. Nehmen wir an, wir haben eine Variable mit einem Namen und wollen in einem Ausgabebefehl einen Genitiv herstellen, indem wir ein s anhängen. Würden wir schreiben

echo $NAMEs

käme es eventuell zu Doppeldeutigkeiten. Die Shell wüßte nicht, ob der Variablenname jetzt NAMEs ist oder NAME mit angehängtem s. Um so eine Doppeldeutigkeit zu vermeiden schreiben wir

echo ${NAME}s

Jetzt kann kein Mißverständnis mehr auftreten.

${Variablenname:-Wert}

Wenn die Variable leer ist oder nicht existiert wird in der Anweisung – und nur da – der angegebene Wert statt dem Variableninhalt benutzt.

${Variablenname:=Wert}

Wenn die Variable leer ist oder nicht existiert wird der Wert in die Variable eingetragen. Diese Form unterscheidet sich von der letzten dadurch, dass der Wert jetzt auch tatsächlich in der Variable gespeichert ist und auch später noch zur Verfügung steht.

${Variablenname:?Wert}

Wenn die Variable leer ist oder nicht existiert wird der Wert ausgegeben und das Script wird beendet. Diese Form ist also geeignet, um kritische Fehler zu behandeln. Wenn eine für ein Script lebensnotwendige Variable nicht existiert bricht das Script ab und gibt Wert auf dem Schirm aus. Logischerweise sollte Wert eine Fehlermeldung enthalten.

Es ist keine extra Ausgabe notwendig, die bash kümmert sich um die Ausgabe von Wert

${Variablenname:+Wert}

Der Wert wird benützt und in die Variable eingetragen, wenn die Variable nicht leer ist.

${#Variablenname}

Dieses Konstrukt gibt die Anzahl der Zeichen zurück, die in einer Variable gespeichert sind.

Schreibe einen Kommentar