ในระบบของฉัน (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"