Auf meinem System (Ubuntu 17.10) funktioniert Ihr Beispiel wie gewünscht, sowohl wenn es über die Befehlszeile (in sh) eingegeben als auch als shSkript ausgeführt wird:
[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
Ich denke, das beantwortet Ihre Frage: Es funktioniert einfach. (Ich habe nicht versucht, Details herauszufinden, wie zu welchem Zeitpunkt genau die Ersetzung des Zeilenumbruchs durch \nerfolgt sh).
Ich bemerkte jedoch, dass sich dasselbe Skript bei der Ausführung mitbash anders verhalten und Hello\nWorldstattdessen ausdrucken würde :
[bash]§ bash test-str.sh
Hello\nWorld
Ich habe es geschafft, die gewünschte Ausgabe bashwie folgt zu erhalten:
[bash]§ STR="Hello
> World"
[bash]§ echo "$STR"
Beachten Sie die doppelten Anführungszeichen $STR. Dies verhält sich identisch, wenn es gespeichert und als bashSkript ausgeführt wird.
Das Folgende gibt auch die gewünschte Ausgabe:
[bash]§ echo "Hello
> World"