我正在编写bash脚本,希望它执行一个命令并逐行处理。例如:
LINES=$(df)
echo $LINES
它将返回所有输出,将换行符转换为空格。
例如:
如果输出应该是:
1
2
3
那么我将获得什么?1 2 3
如何将命令的输出放入变量中,允许换行仍然保持为换行,以便在打印变量时得到正确的输出?
通常在bash中,$v
在大多数情况下都会引起问题。几乎总是你真正想要的是双引号中的"$v"
:
LINES="$(df)"
echo "$LINES"
$(something)
只会删除行末换行符。echo "$LINES"
case
参数中不会被分割成单词。但是可以加上引号,这样更容易记住总是要加上引号。LINES=$(df); echo "${LINES}"
得到了预期的结果,也许我们的环境中IFS不同。尽管如此,在@kubanczyk的答案中,$(df)
比单反引号引用更好,所以还是给个赞。 - nhed$()
比``更受青睐,因为它更易于查看和嵌套。 - Jan Hudececho $$ > /tmp/mypid; LINES=$(ps $(cat /tmp/mypid)); echo "${LINES}"
是可行的...但是使用反引号就不行了。 - nhed