头部在单行上输出文本而没有换行符

时间:2014-05-20 06:25:03

标签: bash shell head

我的命令是:

df=$(echo `df -h | head -3`)
echo $df

我希望它能显示df -h输出的前三行:

Filesystem      Size  Used Avail Use% Mounted on
/abc/asdf       16G   5.6G  9.4G  38% /
abcd            1.9G   12K  1.9G   1% /dev

相反,它输出:

Filesystem Size Used Avail Use% Mounted on /abc/asdf 16G 5.6G 9.4G 38% / abcd 1.9G 12K 1.9G 1% /dev
  • 如何确保echo $df在我的shell脚本中输出换行符?
  • 是什么导致echo忽略来自head的换行符?

2 个答案:

答案 0 :(得分:4)

引用变量以防止分词:

echo "$df"

99%的时候你应该在使用它们时引用变量。如果您真的希望它们受到单词拆分和通配操作,则仅使用不加引号的变量。在某些情况下,不需要引号(例如a=$b之类的分配),但多余的引号不会受到影响。

我刚认为您在echo内也使用了$()。我不知道为什么,但你也需要引用:

df=$(echo "`df -h | head -3`")

但你不需要回声,你可以写:

df=$(df -h | head -3)

答案 1 :(得分:1)

您需要设置IFS变量。

$ df=$(IFS=$''; echo `df -h | head -3`)
$ echo $df
Filesystem      Size  Used Avail Use% Mounted on
/dev/sda3        15G  4.2G  9.7G  31% /
devtmpfs       1010M     0 1010M   0% /dev
$