В моей системе (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"