En mi sistema (Ubuntu 17.10) su ejemplo simplemente funciona como lo desea, tanto cuando se escribe desde la línea de comando (en sh
) como cuando se ejecuta como un 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
Supongo que esto responde a tu pregunta: simplemente funciona. (No he tratado de descubrir detalles como en qué momento \n
ocurre exactamente la sustitución del carácter de nueva línea sh
).
Sin embargo, me di cuenta de que esta misma secuencia de comandos se comportan de manera diferente cuando se ejecuta conbash
y se imprima Hello\nWorld
en su lugar:
[bash]§ bash test-str.sh
Hello\nWorld
Logré obtener el resultado deseado de la bash
siguiente manera:
[bash]§ STR="Hello
> World"
[bash]§ echo "$STR"
Tenga en cuenta las comillas dobles alrededor $STR
. Esto se comporta de manera idéntica si se guarda y ejecuta como un bash
script.
Lo siguiente también da el resultado deseado:
[bash]§ echo "Hello
> World"