hochkomma

Die Bash austricksen

Written by  on Januar 30, 2015

Folgende Problemstellung: In einem Shellscript soll eine Variable unter einfachen Hochkomma eingefügt werden. Von Haus aus geht das nicht, weil das einfache Hochkomma die Variable vor dem Auflösen durch die Shell schützt. Durch doppelte Hochkomma ersetzen geht auch nicht, weil die ebenfalls schon vorkommen und erhalten bleiben sollen weil diese Syntax noch vom nächsten Tool an diesen Stellen nötig sind.

> X=xy
> echo '"ab" "cd" "$X"'
"ab" "cd" "$X"

So klappt es schon mal nicht. Statt $X hätten wir gerne „xy“ da stehen. Was liegt also näher, als mit dem gut alten sed zu ersetzen?

echo $(echo '"ab" "cd" "$X"' | sed s/\$X/$X/g)
"ab" "cd" "xy"

Schon klappt die Ersetzung.
Wie funktioniert das jetzt genau? Im sed wird der String „$X“ mit dem Inhalt von $X ersetzt. Wichtig ist dabei das $-Zeichen mit einem \ zu quoten.