![]() ![]() ![]() |
![]() ![]() |
Die Frage: "Was ist Programmieren?" lässt sich in zwei Worten beantworten: "Werte manipulieren". Die Bash stellt wieder einmal komplexe Mechanismen bereit, um den Inhalt von Zeichenketten zu bearbeiten.
Substitution | Wirkung (Beispiel) |
${var:-default}
|
Ist var leer, liefert das Konstrukt die Zeichenkette
default zurück, ansonsten den Inhalt von
var .
var bleibt unverändert.
Beispiel Einem Shellskript kann optional ein Verzeichnis als erstes Argument übergeben werden. In Abhängigkeit davon soll das Shellskript dorthin wechseln oder im aktuellen Verzeichnis bleiben. Eine mögliche Lösung wäre: cd ${1:-./}1 ist eine spezielle Shell-Variable. |
${var:=default}
|
Wie oben, der Inhalt von var wird auf default
gesetzt, wenn diese leer war.
|
${var:+neu}
|
Ist var leer, bleibt die Variable unverändert,
ansonsten wird die Variable mit neu belegt und der
Wert zurückgeliefert.
|
${var:?error}
|
Ist var leer, wird der Variablennamen und
error ausgegeben und das Shell-Programm beendet.
Ansonsten wird der Inhalt der Variablen zurückgegeben.Beispiel Ein Shellprogramm soll herausfinden, an welchem Terminal ein bestimmter Nutzer angemeldet ist. Dazu muss dem Shellskript die Nutzerkennung als Argument übergeben werden. Das Shellprogramm terminiert mit einer Fehlermeldung, wenn das Argument fehlt: user=${1:?"Usage: $0 <username>"} |
${#var}
|
Liefert die Anzahl der Zeichen in var .
|
${var#muster}
|
Mustervergleich, beginnend am Anfang der Variablen. Wird das Muster
gefunden, wird der Inhalt der Variablen ab dem ersten Zeichen
nach dem ersten gefundenen Muster zurückgegeben.
Ist das Muster nicht enthalten, wird der Inhalt der Variablen geliefert.
Beispiel user@sonne > i="archi~01.gz" user@sonne > tmp=${i#*~} user@sonne > echo $tmp 01.gz |
${var%muster}
|
Wie oben, der Vergleich beginnt am Ende der Variablen.
Geliefert wird, falls das Muster enthalten ist, alles
vom Beginn des Variableninhaltes bis zum ersten Zeichen
vor dem Muster.
Beispiel user@sonne > echo $tmp 01.gz user@sonne > echo ${tmp%.*} 01 |
${var##muster} ${var%%muster} |
Die beiden zuletzt genannten Mechanismen substituieren jeweils das
erste auftretende Muster. Es lässt sich ebenfalls das
längstmögliche Muster eliminieren:
user@sonne > dat=/home/user/text.ps.tgz user@sonne > echo ${dat##*/} text.ps.gz user@sonne > echo ${dat%%.*} /home/user/text |
![]() ![]() ![]() |
![]() ![]() |