2016-04-11 12 views
1

Ich habe Bash-Skript für teamcity.It setzt Build-Variablen Wert in Datei mit Platzhaltern.bash auto escaping von nicht-alphanumerischen Symbolen

% var% - ersetzt durch den Wert von var vor run bash script von teamcity.

Es funktioniert nicht mit Variablen, die ', ", / und wahrscheinlich andere nicht alphanumerische Symbole haben. Zum Beispiel mit title = Auto Shop "SuperCar" stürzt

[00.22.07] sed: 1: "" s/APP_TITLE/Auto ... ": ungültiger Befehlscode"

Wie Skript zu reparieren mit nicht-alphanumerischen Symbolen arbeiten?

+1

Verwenden Sie nicht sed. Verwenden Sie awk oder perl und übergeben Sie die Variablen in. – 123

Antwort

1

Bevor es zu sed entkommen die speziellen/meta Zeichen wie diese vorbei:

BUNDLE_VERSION=$(echo "$BUNDLE_VERSION" | sed -r 's/\\/\\\\/g;s/\//\\\//g;s/\^/\\^/g;s/\[/\\[/g;s/'\''/'\'"\\\\"\'\''/g;s/\]/\\]/g;s/\*/\\*/g;s/\$/\\$/g;s/\./\\./g') 

Beispiel:

$ echo "^[a/b'c\d]*$." | sed -r 's/\\/\\\\/g;s/\//\\\//g;s/\^/\\^/g;s/\[/\\[/g;s/'\''/'\'"\\\\"\'\''/g;s/\]/\\]/g;s/\*/\\*/g;s/\$/\\$/g;s/\./\\./g' 
\^\[a\/b'\''c\\d\]\*\$\. 

und einfache Anführungszeichen, während in Variablen für den Haupt Ausdruck setzen. Es ist besser, ein anderes Werkzeug zum Übergeben von Variablen wie awk 's -v Option zu verwenden.