Shell - 变量在循环后丢失值

时间:2013-12-15 22:11:04

标签: shell loops

我正在尝试计算每行包含一个单词的文件中单词的出现(禁止使用egrep)。我设法找到了一个解决方案,但是我偶然发现了一个非常奇怪的东西,我想解释为什么会发生这种情况。

我的“count”变量在循环后的值为0,但在循环期间它会正确递增。

这是我的代码:

for var in "$@" 
do
    count=0
    cat $1 | while read line ; do
        if [ $line = $var ]; then
            count=$((count + 1))
            echo "$var found $count times"
        fi
    done    
    echo $count
done

我的输出是:

yes found 0 times
yes found 1 times
yes found 2 times
0 - This is from the echo $count, which I find it very odd to be zero, since it got incremented to 3 during the loop.

1 个答案:

答案 0 :(得分:1)

我相信当你用管道输出一个新的子shell时,会在那个shell中修改count并不是你现在的那个。似乎其他人也有这个问题。我从另一个Thread遇到了这个解决方案。我希望这有帮助!