我有两个不同的脚本做基本相同的工作:计算当前目录中的子目录:
c=0
ls -l | grep "^d" | while read zeile
do
c=`expr $c + 1`
echo $c
done
echo "Subdirs: $c"
和
c=0
while read zeile
do
c=`expr $c + 1`
echo $c
done < <(ls -l | grep "^d")
echo "Subdirs: $c"
我的问题是,在第一个版本中,“c”在while循环结束后似乎失去了它的值。
输出
(一)
1
2
3
Subdirs: 0
2个)
1
2
3
Subdirs: 3
你们谁能解释一下,为什么会这样?
提前谢谢
亚历克斯
最佳答案
在第一种情况下,对c的赋值发生在|
之后,即在子shell中。不能从子shell更改父shell中的变量。
顺便问一下,为什么不使用let c++
而不是反引号和expr?
关于bash - 在声明中 bash ,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/8821139/