How to preserve line breaks when storing command output to a variable?
Quote your variables. Here is it why:
$ f="fafafda> adffd> adfadf> adfafd> afd"
$ echo $ffafafda adffd adfadf adfafd afd
$ echo "$f"fafafdaadffdadfadfadfafdafd
Without quotes, the shell replaces $TEMP
with the characters it contains (one of which is a newline). Then, before invoking echo
shell splits that string into multiple arguments using the Internal Field Separator
(IFS), and passes that resulting list of arguments to echo
. By default, the IFS
is set to whitespace (spaces, tabs, and newlines), so the shell chops your $TEMP
string into arguments and it never gets to see the newline, because the shell considers it a separator, just like a space.
I have ran into the same problem, a quote will help
ubuntu@host:~/apps$ apps="abc> def"ubuntu@host:~/apps$ echo $appsabc defubuntu@host:~/apps$ echo "$apps"abcdef