为什么我无法在 shell 脚本的循环外增加 var

为什么我无法在 shell 脚本的循环外增加 var

我正在使用此脚本制作一个计数器,我想在内循环之外访问它,但我没有成功。我遗漏了什么?

while [ 1 ] 
do
        COUNTER=0
        ls /tmp/paping* | grep -v pid | while read pap
        do
                ret=`cat $pap`
                if [ "a$ret" == "aTimeout" ]
                then
                        echo "Do something"
                else
                        arr[$COUNTER]=$pap
                        COUNTER=$(( COUNTER + 1 ))
                fi
                sleep 0.3
                echo $COUNTER
        done
#THIS LINE RETURNs 0
        echo $COUNTER
done

答案1

正如@steeldriver 指出的那样,当我通过管道创建子shell时,var 值不会传递给外部var。

就像这样关联提供

解决方案如下:

while [ 1 ] 
do
        COUNTER=0
 while read pap
        do
                ret=`cat $pap`
                if [ "a$ret" == "aTimeout" ]
                then
                        echo "do something"
                else
                        arr[$COUNTER]=$pap
                        COUNTER=$(( COUNTER + 1 ))
                fi
                sleep 0.3
                echo $COUNTER
        done < <( ls /tmp/paping* | grep -v pid)
        echo $COUNTER
done

现在我的计数器已按预期工作!

答案2

假设您的 shell 是bash,将命令放在shopt -s lastpipe脚本的顶部是一种可能的解决方案。

相关内容