"" ধারণকারী স্ট্রিংয়ের ভিতরে ভেরিয়েবল কীভাবে সন্নিবেশ করবেন?


25

আমি ভেরিয়েবল সন্নিবেশ করে একটি এক্সএমএল স্ট্রিং তৈরি করতে চাই:

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
একটি এক্সএমএল নথিতে ২ টি শীর্ষ স্তরের ট্যাগ থাকতে পারে না। এছাড়াও, এটি 2016, আমি দৃ strongly ়ভাবে utf-8 ব্যবহার করার পরামর্শ দিচ্ছি , আইসো -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")

এটি নিকৃষ্টমানের কারণ এটি একই প্রভাব অর্জন করতে একটি উপ-শেল ব্যবহার করে যা একটি অপ্রয়োজনীয় অতিরিক্ত প্রক্রিয়া।

যেমন @ স্টিল্ড্রাইভার একটি মন্তব্যে লিখেছেন, বাশের আধুনিক সংস্করণগুলিতে আপনি সাব-শেলটি এড়াতে এই জাতীয় লিখতে পারেন:

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>
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.