\n in variable in heredoc
In bash you can use $'\n'
to add a newline to a string:
ret="$ret"$'\n'"$TMP_VAR"
You can also use +=
to append to a string:
ret+=$'\n'"$TMP_VAR"
As others (and other answers to other questions) have said, you can put encoded characters into a string for the shell to interpret.
x=$'\n' # newline
printf -v x '\n' # newline
That said, I don't believe there is any way to directly put an encoded newline into a heredoc.
cat <<EOF
\n
EOF
just outputs a literal \n
cat <<$'EOF'
…
EOF
is nothing special, nor is <<'EOF'
The best you can do is to preencode the newline, and include the expansion in the heredoc:
nl=$'\n'
cat <<EOF
foo bar $nl baz
EOF
outputs
foo bar
baz
Change:
==
$ret
==
to:
==
$(echo -e $ret)
==