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