繁体   English   中英

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

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM