Pada sistem saya (Ubuntu 17.10) contoh Anda hanya berfungsi seperti yang diinginkan, baik ketika diketik dari baris perintah (ke sh) dan ketika dieksekusi sebagai shskrip:
[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
Saya kira ini menjawab pertanyaan Anda: itu hanya berfungsi. (Saya belum mencoba mencari tahu detail seperti kapan tepatnya penggantian karakter baris baru \nterjadi dish ).
Namun, saya perhatikan bahwa skrip yang sama ini akan berperilaku berbeda ketika dieksekusi denganbash dan akan dicetak Hello\nWorldsebagai gantinya:
[bash]§ bash test-str.sh
Hello\nWorld
Saya sudah berhasil mendapatkan hasil yang diinginkan bash sebagai berikut:
[bash]§ STR="Hello
> World"
[bash]§ echo "$STR"
Perhatikan tanda kutip ganda di sekitar $STR. Ini berperilaku identik jika disimpan dan dijalankan sebagai bashskrip.
Berikut ini juga memberikan output yang diinginkan:
[bash]§ echo "Hello
> World"