Uhu Uhuhu schrieb:
> Über diese svg-Zeile fliegt er:
> gradientTransform="matrix(0,-0.8875284,0.45378157,0,-2.33147,1053.0765)"
> />
>
> Die öffnende Klammer ist der Verrecker.
Die Klammer wird nur deswegen als bsonderes Shell-Zeichen interpretiert,
weil das Anführungszeichen davor
Die Klammer ist gar nicht so schlimm, denn ich habe den String ja extra
in Anführungszeichen gesetzt, um die Interpretation solcher Dinge zu
verhindern. Aber das Anführungszeichen vor "matrix" macht dieses Bemühen
leider zunichte.
Damit die Zeichen '"', '`' und '\' innerhalb des Texts von der Shell
nicht interpretiert werden, muss man sie vor der Übergabe an eval
escapen.
Hier ist ein neuer Versuch:
1 | txt1='${VAR1} als
|
2 | Subs${VAR2}tu${VAR2}onswerkzeug
|
3 | gradientTransform="matrix(0,-0.8875284,0.45378157,0,-2.33147,1053.0765)" />
|
4 | Weitere Spezialzeichen: \ und `'
|
5 |
|
6 | VAR1='bash'
|
7 | VAR2='ti'
|
8 |
|
9 | txt2="${txt1//\\/\\\\}"
|
10 | txt2="${txt2//\"/\\\"}"
|
11 | txt2="${txt2//\`/\\\`}"
|
12 | txt2=$(eval echo "\"$txt2\"")
|
13 |
|
14 | echo "$txt1"
|
15 | echo
|
16 | echo "$txt2"
|
Das Problem von $-Zeichen, die nicht zu einem Variablennamen gehören,
besteht aber weiterhin. Evtl. ist es geschickter, die Variablen nicht
direkt zu expandieren, sondern nacheinander für jede Variable die
Search/Replace-Funktion auf den gesamten Text anzuwenden:
1 | txt1='${VAR1} als
|
2 | Subs${VAR2}tu${VAR2}onswerkzeug
|
3 | gradientTransform="matrix(0,-0.8875284,0.45378157,0,-2.33147,1053.0765)" />
|
4 | Weitere Spezialzeichen: \, ` und ${KEINEVARIABLE}'
|
5 |
|
6 | txt2="$txt1"
|
7 | txt2="${txt2//\$\{VAR1\}/bash}"
|
8 | txt2="${txt2//\$\{VAR2\}/ti}"
|
9 |
|
10 | echo "$txt1"
|
11 | echo
|
12 | echo "$txt2"
|