Shell-Skripting Tricks


In Shell-Skripten sieht man oft Klimmzüge mit sed oder basename, um von einem String den Anfang oder das Ende zu beschneiden. Beispiele für sowas wären: (Ich verwendet ganz bewußt $() statt Backticks, da diese je nach Font nicht von normalen Quotes zu unterscheiden sind)

foo=“/home/fastjack/screenshot.png”
bar=$( echo $i | sed “s#$(echo $HOME)/##g” )

Auch oft verwendet wird sowas:

bar=“screenshot.png”
baz=$( basename $bar .png )

Beide Beispiele lassen sich in der Bash und Zsh (und vermutlich auch in einigen anderen Shells außer der Bourne Shell) vereinfachen.

Das erste Beispiel könnte dann so aussehen:

foo=“/home/fastjack/screenshot.png”
bar=${foo#$HOME/}

Und das zweite Beispiel sähe dann so aus:

bar=“screenshot.png”
baz=${bar%.png}

Natürlich kann man beides auch ineinander schachteln:

bar=${${foo#$HOME/}%.png}

Der Vorteil ist, daß die Shell nicht einen zusätzlichen Prozess forken muß, um die Strings zu bearbeiten.


Leave a Reply

Your email address will not be published. Required fields are marked *

This site uses Akismet to reduce spam. Learn how your comment data is processed.