place a multi-line output inside a variable

2019-06-16 15:50发布

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?

标签: bash bash4
2条回答
Animai°情兽
2楼-- · 2019-06-16 16:39

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"
查看更多
可以哭但决不认输i
3楼-- · 2019-06-16 16:43

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.

查看更多
登录 后发表回答