Как сохранить символы новой строки в цитируемой строке в Bash?

Я создаю script для автоматизации создания виртуальных хостов apache. Часть моего script выглядит примерно так:

MYSTRING="<VirtualHost *:80>

ServerName $NEWVHOST
DocumentRoot /var/www/hosts/$NEWVHOST

...

"
echo $MYSTRING

Однако разрывы строк в script игнорируются. Если я повторяю строку, выплевывается как одна строка.

Как я могу гарантировать, что распечатываются строки?

Ответ 1

Добавьте кавычки, чтобы заставить его работать:

echo "$MYSTRING"

Посмотрите на это следующим образом:

MYSTRING="line-1
line-2
line3"

echo $MYSTRING

это будет выполняться как:

echo line-1 \
line-2 \
line-3

то есть. echo с тремя параметрами, печать каждого параметра с промежутком между ними.

Если вы добавили кавычки вокруг $MYSTRING, итоговая команда будет:

echo "line-1
line-2
line-3"

то есть. echo с одним строковым параметром, который имеет три строки текста и два разрыва строки.