मेरे सिस्टम पर (Ubuntu 17.10) आपका उदाहरण वांछित के रूप में काम करता है, दोनों जब कमांड लाइन (टाइप) से टाइप किया जाता है shऔर जब shस्क्रिप्ट के रूप में निष्पादित होता है :
[bash]§ sh
$ STR="Hello\nWorld"
$ echo $STR
Hello
World
$ exit
[bash]§ echo "STR=\"Hello\nWorld\"
> echo \$STR" > test-str.sh
[bash]§ cat test-str.sh
STR="Hello\nWorld"
echo $STR
[bash]§ sh test-str.sh
Hello
World
मुझे लगता है कि यह आपके सवाल का जवाब देता है: यह सिर्फ काम करता है। (मैंने विवरणों का पता लगाने की कोशिश नहीं की है कि किस क्षण न्यूलाइन चरित्र का प्रतिस्थापन \nहोता है sh)।
हालाँकि, मैंने देखा कि यह एक ही स्क्रिप्ट के साथbash निष्पादित होने पर अलग तरह से व्यवहार करेगा और Hello\nWorldइसके बजाय प्रिंट आउट करेगा :
[bash]§ bash test-str.sh
Hello\nWorld
मैं bashनिम्नानुसार वांछित आउटपुट प्राप्त करने में कामयाब रहा :
[bash]§ STR="Hello
> World"
[bash]§ echo "$STR"
चारों ओर दोहरे उद्धरणों पर ध्यान दें $STR। यदि यह bashस्क्रिप्ट के रूप में सहेजा और चलाया जाता है, तो यह व्यावहारिक रूप से व्यवहार करता है ।
निम्नलिखित भी वांछित उत्पादन देता है:
[bash]§ echo "Hello
> World"