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.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:
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.