Bash shell脚本中的全局变量

Bash shell脚本中的全局变量,bash,shell,Bash,Shell,我想在以下代码中将z设置为全局变量: #!/bin/bash z=0; find $1 -name "*.txt" | \ while read file do i=1; z=`expr $i + $z`; echo "$z"; done ec

我想在以下代码中将
z
设置为全局变量:

#!/bin/bash                                                                                                                          
z=0;
find $1 -name "*.txt" | \
while read file
do
  i=1;
  z=`expr $i + $z`;
  echo "$z";
done
echo "$z";

最后一条语句始终输出“0”。为什么?

我不知道为什么会发生这种情况,但问题是由管道引起的

如果你这样做

#!/bin/bash                                                                                                                          
    z=0;
    for f in `find $1 -name "*.txt"`
    do
    i=1;
    z=`expr $i + $z`;
    echo "$z";
    done
    echo "$z";

那么$z就不会是零。

简单的翻译方法

find ...  | while read ...; done
要创建不带管道的窗体,请使用:


读取时。。。;完成<如何获取z内的最后一个值?您可以使用
z=$((z+I))
((z+=I))
来了解调用
expr
while read ...; done < <(find ...)