Trên hệ thống của tôi (Ubuntu 17.10), ví dụ của bạn chỉ hoạt động như mong muốn, cả khi được nhập từ dòng lệnh (vào sh) và khi được thực thi dưới dạng shtập lệnh:
[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
Tôi đoán điều này trả lời câu hỏi của bạn: nó chỉ hoạt động. (Tôi đã không cố gắng tìm ra các chi tiết như tại thời điểm nào chính xác việc thay thế ký tự dòng mới \nxảy ra trongsh ).
Tuy nhiên, tôi nhận thấy rằng kịch bản này tương tự sẽ hành xử khác nhau khi thực hiện vớibash và sẽ in ra Hello\nWorldthay vì:
[bash]§ bash test-str.sh
Hello\nWorld
Tôi đã quản lý để có được đầu ra mong muốn bashnhư sau:
[bash]§ STR="Hello
> World"
[bash]§ echo "$STR"
Lưu ý các dấu ngoặc kép xung quanh $STR. Điều này hành xử giống hệt nếu được lưu và chạy như mộtbash tập lệnh.
Sau đây cũng cho đầu ra mong muốn:
[bash]§ echo "Hello
> World"