shell脚本中的全局变量

时间:2011-10-25 07:02:57

标签: bash shell

我想在以下代码中将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”。为什么呢?

3 个答案:

答案 0 :(得分:5)

答案 1 :(得分:1)

翻译的简单方法

find ...  | while read ...; done

到没有管道的表单正在使用process substitution

while read ...; done < <(find ...)

可读性受到一定程度的影响。

答案 2 :(得分: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不会为零。