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 sh
skrip:
[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 \n
terjadi dish
).
Namun, saya perhatikan bahwa skrip yang sama ini akan berperilaku berbeda ketika dieksekusi denganbash
dan akan dicetak Hello\nWorld
sebagai 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 bash
skrip.
Berikut ini juga memberikan output yang diinginkan:
[bash]§ echo "Hello
> World"