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