我有两个不同的脚本做基本相同的工作:计算当前目录中的子目录:

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/

10-13 05:58