在变量中放置多行输出

ufk*_*ufk 8 bash bash4

我正在用bash编写一个脚本,我希望它能够执行命令并分别处理每一行.例如:

LINES=$(df)
echo $LINES
Run Code Online (Sandbox Code Playgroud)

它将返回所有输出转换带空格的新行.

例:

如果输出应该是:

1
2
3
Run Code Online (Sandbox Code Playgroud)

然后我会得到

1 2 3
Run Code Online (Sandbox Code Playgroud)

如何将命令的输出放入变量中,使新行仍然是新行,这样当我打印变量时,我会获得正确的输出?

kub*_*zyk 12

一般来说,bash $v在大多数情况下都会遇到麻烦.几乎总是你真正的意思是"$v"双引号.

LINES="`df`"     # double-quote + backtick
echo "$LINES"
OLDPATH="$PATH"
Run Code Online (Sandbox Code Playgroud)

  • 实际上,对变量的赋值都不需要引号,因为扩展的结果在赋值给变量时不会被分词.但是它们不会伤害任何东西,而且训练你的肌肉记忆更容易在所有扩展周围输入双引号. (6认同)

Jan*_*dec 6

不,它不会.该$(something)只带尾随换行.

参数扩展为回显分裂空白和回声连接单独的参数与空格.要保留空白,您需要再次引用:

echo "$LINES"
Run Code Online (Sandbox Code Playgroud)

请注意,转让时并不需要被引用; 在赋值给变量和参数时,扩展的结果不是分词case.但它可以被引用,并且更容易学会总是把引号放进去.