循环退出后的局部变量

Leo*_*Leo 2 bash

退出循环后,我遇到了局部变量的一些问题.max尽管代码如下,变量的最终值为0:

max=0
cat tmp|while read line
do
temp=$(echo $line|tr -d "\n"|wc -c)
if [ $temp -gt $max ];then

max=$temp
echo $max
fi
done
echo -n tmp $max

cat tmp
12345
123456
Run Code Online (Sandbox Code Playgroud)

这是我收到的输出:

5
6
 tmp 0
Run Code Online (Sandbox Code Playgroud)

我不明白为什么max在退出循环后为0,而在循环内它找到正确的值.

Ign*_*ams 13

管道启动一个新的子shell,具有自己的环境和可变空间.< tmp改为在循环结束时使用.

  • 我很沮丧. (2认同)