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

发布于 2021-11-24 13:48:21 字数 598 浏览 883 评论 5

#!/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 %dn" $yfind
printf "nfind is %dn" $nfind

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(5

深巷少女 2021-12-01 02:24:03

就差了个cat使用管道,和使用<重定向给数据的差别。这个得深入理解啊,真不容易。

旧伤慢歌 2021-12-01 01:41:47

是可以的 我只是想自己写写脚本试试看 结果就碰到问题了

岁月打碎记忆 2021-11-30 08:25:03

太感谢了 我找的就是这个!!

倚栏听风 2021-11-30 08:16:06

回复
哈 能解决问题就好

各自安好 2021-11-25 07:52:40

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 %dn" $yfind
printf "nfind is %dn" $nfind

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文