如何在shell中获取字符串的第二个单词?

时间:2019-03-15 00:56:30

标签: bash shell

我想获取目录内容的大小。如果我使用命令行,我会得到这样的信息:

ls -l | head -n 1 | awk '{ print $2 }'

所以输出是目录内容的大小:

16816

但是我想在bash脚本中做到这一点:

x="ls -l DBw | head -n 1 | awk '{ print $2 }'"
while sleep 1; do
        y=$(eval "$x");
        echo $y
done

但是此脚本的输出为整行:

Total 16816

为什么会发生这种情况,我如何才能得到第二个单词?

1 个答案:

答案 0 :(得分:1)

x="ls -l DBw | head -n 1 | awk '{ print $2 }'"

之所以会这样,是因为$2在双引号内,因此将立即对其进行解释。您可以使用\$2对其进行转义,但更好的是:

不要将代码存储在变量中。使用功能。

x() {
    ls -l DBw | head -n 1 | awk '{ print $2 }'
}

然后您可以多次拨打x

while sleep 1; do
    x
done

也就是说,it's better not to parse the output of ls首先。使用du计算目录的大小:

$ du -sh /dir
1.3M   /dir
$ du -sh /dir | cut -f1
1.3M