I'm writing a script in bash and I want it to execute a command and to handle each line separately. for example:
LINES=$(df)
echo $LINES
it will return all the output converting new lines with spaces.
example:
if the output was supposed to be:
1
2
3
then I would get
1 2 3
how can I place the output of a command into a variable allowing new lines to still be new lines so when I print the variable i will get proper output?
Generally in bash $v
is asking for trouble in most cases. Almost always what you really mean is "$v"
in double quotes.
LINES="`df`" # double-quote + backtick
echo "$LINES"
OLDPATH="$PATH"
No, it will not. The $(something)
only strips trailing newlines.
The expansion in argument to echo splits on whitespace and than echo concatenates separate arguments with space. To preserve the whitespace, you need to quote again:
echo "$LINES"
Note, that the assignment does not need to be quoted; result of expansion is not word-split in assignment to variable and in argument to case
. But it can be quoted and it's easier to just learn to just always put the quotes in.