How do I preserve newlines in a quoted string in Bash?

Bash

Bash Problem Overview


I'm creating a script to automate the creation of apache virtual hosts. Part of my script goes like this:

MYSTRING="<VirtualHost *:80>

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

...

"
echo $MYSTRING

However, the line breaks in the script are being ignored. If I echo the string, is gets spat out as one line.

How can I ensure that the line breaks are printed?

Bash Solutions


Solution 1 - Bash

Add quotes to make it work:

echo "$MYSTRING"

Look at it this way:

MYSTRING="line-1
line-2
line3"

echo $MYSTRING

this will be executed as:

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

i.e. echo with three parameters, printing each parameter with a space in between them.

If you add quotes around $MYSTRING, the resulting command will be:

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

i.e. echo with a single string parameter which has three lines of text and two line breaks.

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
Questionbob dobbsView Question on Stackoverflow
Solution 1 - BashMartinView Answer on Stackoverflow