öffnen Tags

öffnen Kategorien

Vom WebReader vorlesen lassen

Bash Parametersubstitution

20. Nov 2009, 14:02

Ich wollte gerade die Endungen von allen Dateien eines Ordners ändern und musste natürlich erstmal wieder im Netzn suchen. Um das ganze für das nächste Mal zu optimieren gibt's hier eine kleine Gedankenstütze.

Das ganze nennt sich Parametersubstitution und funktioniert wie folgt:

1
for i in `ls *.ALT`; do echo ${i/.ALT/}.NEU; done

ändert also alle Dateien mit der Endung .ALT in .NEU.
Außer /.../ gibt es noch die folgenden Substitutionen:

${#var}
Liefert die Anzahl der Zeichen in $var.

${var#muster}
Wird muster in $var gefunden, wird der Inhalt von $var ab dem ersten Zeichen nach dem ersten Muster zurück gegeben. Bei Missmatch wird der gesamte Inhalt der Variablen geliefert.

${var%muster}
Der umgekehrte Fall von oben, es wird der Inhalt von $var bis zum ersten gefunden Muster geliefert, oder wenn nichts gefunden wird, der komplette Inhalt von $var.

${var##muster} bzw. ${var%%muster}
Wie die letzen beiden Fälle, jedoch wird das Muster von hinten gesucht. Es wird also das letzte gefundene Muster genutzt.

${var:-default}
Liefert default zurück, wenn $var leer ist, ansonsten $var. $var bleibt auf jeden Fall unverändert!

${var:=default}
Liefert default zurück, wenn $var leer ist, ansonsten $var. Ist $var leer, bekommt $var den Wert default.

${var:+neu}
Wenn $var leer ist, bleibt $var unverändert, sonst wird $var auf neu gesetzt und der Wert zurück gegeben.

${var:?error}
Wenn $var leer ist, wird der Name der Variablen und error ausgegeben, das Script wird beendet. Im anderen Fall wird einfach der Inhalt von $var zurück gegeben.

Ist natürlich nur für die Bash aktuell, in wie weit andere Shells damit umgehen könnten bleibt ungewiss ;-)

Tags: Bash Linux Software Unix

Kategorien: Linux Software Unix

© 2009-2018 by Martin Scharm