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.