Auf meinem System (Ubuntu 17.10) funktioniert Ihr Beispiel wie gewünscht, sowohl bei der Eingabe von der Kommandozeile (in sh
) und bei Ausführung als sh
Drehbuch:
[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, z. B. zu welchem Zeitpunkt genau die Ersetzung des Zeilenumbruchs durch das Zeichen \n
geschieht in sh
).
Ich habe jedoch festgestellt, dass sich dasselbe Skript anders verhält, wenn es ausgeführt wird mit bash
und würde ausdrucken Hello\nWorld
stattdessen:
[bash]§ bash test-str.sh
Hello\nWorld
Ich habe es geschafft, die gewünschte Ausgabe zu erhalten mit bash
wie folgt:
[bash]§ STR="Hello
> World"
[bash]§ echo "$STR"
Beachten Sie die doppelten Anführungszeichen um $STR
. Dies verhält sich identisch, wenn es gespeichert und als bash
Drehbuch.
Das folgende Beispiel ergibt ebenfalls die gewünschte Ausgabe:
[bash]§ echo "Hello
> World"
0 Stimmen
Verwandt: Echo newline in Bash prints literal \n