"स्ट्रिंग" के अंदर चर कैसे डालें?


25

मैं चर डालकर एक xml स्ट्रिंग का निर्माण करना चाहता हूं:

str1="Hello"
str2="world"

xml='<?xml version="1.0" encoding="iso-8859-1"?><tag1>$str1</tag1><tag2>$str2</tag2>'

echo $xml

परिणाम होना चाहिए

<?xml version="1.0" encoding="iso-8859-1"?><tag1>Hello</tag1><tag2>world</tag2>

लेकिन मुझे जो मिलता है वह है:

<?xml version="1.0" encoding="iso-8859-1"?><tag1>$str1</tag1><tag2>$str2</tag2>

मैंने भी कोशिश की

xml="<?xml version="1.0" encoding="iso-8859-1"?><tag1>$str1</tag1><tag2>$str2</tag2>"

लेकिन वह आंतरिक दोहरे उद्धरणों को हटा देता है और देता है:

<?xml version=1.0 encoding=iso-8859-1?><tag1>hello</tag1><tag2>world</tag2>

2
XML दस्तावेज़ में 2 शीर्ष-स्तरीय टैग नहीं हो सकते। इसके अलावा, यह 2016 है, मैं दृढ़ता से utf-8 का उपयोग करने की सलाह दूंगा, iso-8859-1 से नहीं।
सेलडा

जवाबों:


29

आप चर को केवल डबल-उद्धृत स्ट्रिंग्स में एम्बेड कर सकते हैं।

इस काम को करने का एक आसान और सुरक्षित तरीका इस तरह एकल-उद्धृत स्ट्रिंग से बाहर निकलना है:

xml='<?xml version="1.0" encoding="iso-8859-1"?><tag1>'"$str1"'</tag1><tag2>'"$str2"'</tag2>'

ध्यान दें कि एकल-उद्धृत स्ट्रिंग से बाहर निकलने के बाद, मैंने डबल-कोट्स के भीतर चर को संलग्न किया। यह चर के अंदर विशेष वर्ण रखने के लिए सुरक्षित बनाने के लिए है।

चूँकि आपने दूसरा रास्ता पूछा था, यहाँ एक निम्न विकल्प का उपयोग किया गया है printf:

xml=$(printf '<?xml version="1.0" encoding="iso-8859-1"?><tag1>%s</tag1><tag2>%s</tag2>' "$str1" "$str2")

यह हीन है क्योंकि यह एक उप-शेल का उपयोग उसी प्रभाव को प्राप्त करने के लिए करता है, जो एक अनावश्यक अतिरिक्त प्रक्रिया है।

जैसा कि @steeldriver ने बैश के आधुनिक संस्करणों में एक टिप्पणी में लिखा है, आप उप-शेल से बचने के लिए इस तरह लिख सकते हैं:

printf -v xml ' ... ' "$str1" "$str2"

चूंकि printfशेल निर्मित है, इसलिए यह विकल्प संभवत: शीर्ष पर मेरे पहले सुझाव के साथ है।


7

परिवर्तनीय विस्तार एकल उद्धरण स्ट्रिंग्स में नहीं होता है।

आप अपने स्ट्रिंग के लिए दोहरे उद्धरण चिह्नों का उपयोग कर सकते हैं, और अंदर दोहरे उद्धरण चिह्नों से बच सकते हैं \। ऐशे ही :

xml="<?xml version=\"1.0\" encoding=\"iso-8859-1\"?><tag1>$str1</tag1><tag2>$str2</tag2>"

परिणाम आउटपुट:

<?xml version="1.0" encoding="iso-8859-1"?><tag1>hello</tag1><tag2>world</tag2>
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.