刚接触脚本,求帮忙看下问题在哪里?为什么中间过程的输出是对的,结尾的输出却不对了?

wakelay 发布于 2015/06/25 16:12
阅读 195
收藏 0
#!/bin/bash
yfind=10;
nfind=10;
echo $2
cat $1| while read line 
do
    if grep -s "$line" $2
    then
        echo "yfind"
        yfind=$[ $yfind + 1 ] 
        echo $yfind #这里输出的结果是正确的
    else
        echo "nfind"
        let nfind+=1;
    fi  

done

echo $yfind #这里输出始终是10
printf "yfind is %d\n" $yfind
printf "nfind is %d\n" $nfind

加载中
1
冬芽
冬芽

while会产生一个子进程并在其中运行,当子进程结束之后,子进程变量就会失效,所以最后你得到的还是原来的变量 这里有一个链接 下面两个链接你可以参考一下

http://mywiki.wooledge.org/BashFAQ/024

http://stackoverflow.com/questions/16854280/modifying-variable-inside-while-loop-is-not-remembered


在我这运行正确的一个版本

#!/bin/bash
yfind=0
nfind=0

while read line 
do
    echo $line
    if grep -s "$line" $2
    then
        echo "yfind"
        yfind=$[ $yfind + 1 ]
        echo $yfind #这里输出的结果是正确的
    else
        echo "nfind"
        nfind=$[ $nfind + 1 ]
    fi  
done < $1

printf "yfind is %d\n" $yfind
printf "nfind is %d\n" $nfind



冬芽
冬芽
回复 @wakelay : 哈 能解决问题就好
w
wakelay
太感谢了 我找的就是这个!!
0
hakuyo
hakuyo
grep | wc 如何
w
wakelay
是可以的 我只是想自己写写脚本试试看 结果就碰到问题了
0
实践哥
实践哥
就差了个cat使用管道,和使用<重定向给数据的差别。这个得深入理解啊,真不容易。
返回顶部
顶部