W moim systemie (Ubuntu 17.10) twój przykład działa tak, jak chcesz, zarówno po wpisaniu z linii poleceń (do sh
), jak i po uruchomieniu jako sh
skrypt:
[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
Myślę, że to odpowiada na twoje pytanie: to po prostu działa. (Nie próbowałem dowiedzieć się szczegółów, takich jak na jakim dokładnie momencie zastąpienia znak nowej linii dla \n
zdarza się sh
).
Jednak zauważyłem, że ten sam skrypt będzie zachowywać się inaczej, gdy wykonywane zbash
i będzie drukować Hello\nWorld
zamiast:
[bash]§ bash test-str.sh
Hello\nWorld
Udało mi się uzyskać pożądany wynik bash
w następujący sposób:
[bash]§ STR="Hello
> World"
[bash]§ echo "$STR"
Zwróć uwagę na podwójne cytaty wokół $STR
. To zachowuje się identycznie, jeśli zostanie zapisane i uruchomione jako bash
skrypt.
Poniższe daje również pożądany wynik:
[bash]§ echo "Hello
> World"