刚接触脚本,求帮忙看下问题在哪里?为什么中间过程的输出是对的,结尾的输出却不对了?
#!/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
printf "yfind is %dn" $yfind
printf "nfind is %dn" $nfind
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 #这里输出始终是10printf "yfind is %dn" $yfind
printf "nfind is %dn" $nfind
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(5)
就差了个cat使用管道,和使用<重定向给数据的差别。这个得深入理解啊,真不容易。
是可以的 我只是想自己写写脚本试试看 结果就碰到问题了
太感谢了 我找的就是这个!!
回复
哈 能解决问题就好
while会产生一个子进程并在其中运行,当子进程结束之后,子进程变量就会失效,所以最后你得到的还是原来的变量 这里有一个链接 下面两个链接你可以参考一下
http://mywiki.wooledge.org/BashFAQ/024
http://stackoverflow.com/questions/16854280/modifying-variable-inside-while-loop-is-not-remembered
在我这运行正确的一个版本