Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

place a multi-line output inside a variable

Tags:

bash

bash4

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?

like image 701
ufk Avatar asked Jan 03 '12 13:01

ufk


2 Answers

Generally in bash $v is asking for trouble in most cases. Almost always what you really mean is "$v" in double quotes:

LINES="$(df)"
echo "$LINES"
like image 77
kubanczyk Avatar answered Nov 13 '22 10:11

kubanczyk


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.

like image 29
Jan Hudec Avatar answered Nov 13 '22 12:11

Jan Hudec