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 sh
tậ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 \n
xả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\nWorld
thay vì:
[bash]§ bash test-str.sh
Hello\nWorld
Tôi đã quản lý để có được đầu ra mong muốn bash
như 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"