Ich möchte eine XML-Zeichenfolge durch Einfügen von Variablen erstellen:
str1="Hello"
str2="world"
xml='<?xml version="1.0" encoding="iso-8859-1"?><tag1>$str1</tag1><tag2>$str2</tag2>'
echo $xml
Das Ergebnis sollte sein
<?xml version="1.0" encoding="iso-8859-1"?><tag1>Hello</tag1><tag2>world</tag2>
Aber was ich bekomme ist:
<?xml version="1.0" encoding="iso-8859-1"?><tag1>$str1</tag1><tag2>$str2</tag2>
Ich habe es auch versucht
xml="<?xml version="1.0" encoding="iso-8859-1"?><tag1>$str1</tag1><tag2>$str2</tag2>"
Aber das entfernt die inneren doppelten Anführungszeichen und gibt:
<?xml version=1.0 encoding=iso-8859-1?><tag1>hello</tag1><tag2>world</tag2>
Antworten:
Sie können Variablen nur in doppelte Anführungszeichen einbetten.
Eine einfache und sichere Möglichkeit, diese Arbeit zu erledigen, besteht darin, aus der Zeichenfolge in Anführungszeichen wie folgt auszubrechen:
Beachten Sie, dass ich die Variablen nach dem Aufbrechen der Zeichenfolge in doppelte Anführungszeichen eingeschlossen habe. Dies dient der Sicherheit, Sonderzeichen in den Variablen zu haben.
Da Sie nach einem anderen Weg gefragt haben, finden Sie hier eine minderwertige Alternative
printf
:Dies ist minderwertig, da eine Unterschale verwendet wird, um den gleichen Effekt zu erzielen, was ein unnötiger zusätzlicher Prozess ist.
Wie @steeldriver in einem Kommentar schrieb, können Sie in modernen Versionen von bash folgendermaßen schreiben, um die Unterschale zu umgehen:
Da
printf
es sich um eine eingebaute Shell handelt, ist diese Alternative wahrscheinlich Teil meines ersten Vorschlags oben.quelle
Die variable Erweiterung erfolgt nicht in Strings mit einfachen Anführungszeichen.
Sie können doppelte Anführungszeichen für Ihre Zeichenfolge verwenden und die darin enthaltenen doppelten Anführungszeichen mit entziehen
\
. So was :Die Ergebnisausgabe:
quelle