[英]How to get the second word of a string in 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
为什么会发生这种情况,我该如何获得第二个单词?
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
也就是说, 最好不要首先解析ls的输出 。 使用du
计算目录的大小:
$ du -sh /dir
1.3M /dir
$ du -sh /dir | cut -f1
1.3M
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.