No meu sistema (Ubuntu 17.10), seu exemplo funciona como desejado, quando digitado na linha de comando (para sh
) e quando executado como um sh
script:
[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
Acho que isso responde à sua pergunta: simplesmente funciona. (Não tentei descobrir detalhes como em que momento exatamente \n
ocorre a substituição do caractere de nova linha sh
).
No entanto, notei que esse mesmo script se comportaria de maneira diferente quando executado combash
e seria impresso Hello\nWorld
:
[bash]§ bash test-str.sh
Hello\nWorld
Consegui obter a saída desejada com bash
o seguinte:
[bash]§ STR="Hello
> World"
[bash]§ echo "$STR"
Observe as aspas duplas ao redor $STR
. Isso se comporta de forma idêntica se salvo e executado como um bash
script.
O seguinte também fornece a saída desejada:
[bash]§ echo "Hello
> World"