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