Egy xml karakterláncot szeretnék létrehozni változók beillesztésével:
str1="Hello" str2="world" xml="<?xml version="1.0" encoding="iso-8859-1"?><tag1>$str1</tag1><tag2>$str2</tag2>" echo $xml
Az eredmény legyen
<?xml version="1.0" encoding="iso-8859-1"?><tag1>Hello</tag1><tag2>world</tag2>
De amit kapok:
<?xml version="1.0" encoding="iso-8859-1"?><tag1>$str1</tag1><tag2>$str2</tag2>
Én is kipróbáltam
xml="<?xml version="1.0" encoding="iso-8859-1"?><tag1>$str1</tag1><tag2>$str2</tag2>"
Ez azonban eltávolítja a belső kettős idézőjeleket, és így ad:
<?xml version=1.0 encoding=iso-8859-1?><tag1>hello</tag1><tag2>world</tag2>
Megjegyzések
- Egy XML dokumentumnak nem lehet 2 legfelső szintű címkéje. Ezenkívül ' 2016-ban is, erősen javasoljuk az utf-8, nem pedig az iso-8859-1 használatát.
Válasz
A változókat csak dupla idézett karakterláncokba ágyazhatja be.
A munka egyszerű és biztonságos módja: hogy kitörjön az egyidéző karakterláncból, így:
xml="<?xml version="1.0" encoding="iso-8859-1"?><tag1>""$str1""</tag1><tag2>""$str2""</tag2>"
Figyelje meg, hogy az egyszer idézett karakterláncból való kitörés után a változókat dupla idézetek. Ez biztonságossá teszi, hogy speciális karakterek legyenek a változókban.
Mivel más utat kért, itt egy alacsonyabbrendű alternatíva a printf
használatával:
xml=$(printf "<?xml version="1.0" encoding="iso-8859-1"?><tag1>%s</tag1><tag2>%s</tag2>" "$str1" "$str2")
Ez alacsonyabb rendű, mert egy alhéj segítségével éri el ugyanazt a hatást, ami felesleges extra folyamat.
Mint @steeldriver kommentben írta, a bash modern verzióiban így írhat, hogy elkerülje az alhéjat:
printf -v xml " ... " "$str1" "$str2"
Mivel a printf
egy beépített shell, ezért valószínűleg ez az alternatíva az első javaslatommal a tetején található.
Válasz
A változó kiterjesztés nem történik meg egyetlen idézet karakterláncokban.
Használhat dupla idézőjeleket a karakterláncához, és elkerülheti a dupla idézőjeleket belül a következővel: \
. Így:
xml="<?xml version=\"1.0\" encoding=\"iso-8859-1\"?><tag1>$str1</tag1><tag2>$str2</tag2>"
Az eredmény kimenete:
<?xml version="1.0" encoding="iso-8859-1"?><tag1>hello</tag1><tag2>world</tag2>