我想获取目录内容的大小。如果我使用命令行,我会得到这样的信息:
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
为什么会发生这种情况,我如何才能得到第二个单词?
答案 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