【发布时间】:2014-05-12 02:08:43
【问题描述】:
我有以下脚本:
ls -l | while read permissions number user user2 size month day hour filename
do
if [[ "$filename" == *foo* ]]
then
scount=`expr $scount + $size`
fi
done
echo $scount
脚本检查我文件夹中文件的文件名和大小,然后检查包含“foo”字样的文件,然后获取大小并添加它。
我有以下问题,如果我从循环内部调用 scount 变量,它会显示数字,但是当它在外部时,它什么也不显示,就好像该变量不存在一样。它与shell会话有关吗?如何在循环外显示变量?
【问题讨论】:
-
只是一个猜测,但也许你必须在循环外声明你的变量:-)
-
您正在子shell 中操作变量。请参阅链接的问题以获得答案。
-
作为旁注:为了解析有关文件的信息,请使用
stat而不是ls。如果您想计算给定数量的文件的大小,请查看du。 -
@devnull 是正确的 - 子外壳是问题所在。循环查找结果可能更适合您的目的:
for f in $(find /my/dir -name "*foo*"); do ... done并使用stat获取每个$f的大小。 -
谢谢乔希。我一定会检查 devnull 引用并使用 find 和 stat 重写我的代码。