全局变量在循环中不能赋值的问题
by katana
全局变量在循环中不能赋值的问题
先来看一个例子:
itest=0
echo -e "katana/nlear/nfracnis/nkatana/n"|while read sLine
do
if [ "$sLine" == "katana" ]
then
let itest=$itest+1
echo "itest:$itest"
fi
done
echo "final itest:$itest"
执行结果:
itest:1
itest:2
final itest:0
在执行循环过程中,itest都能正确相加,但是循环结束后itest没有被赋值。
这是while作用域的一个问题,当使用了管道|之后,while语句就会出现这样的问题,如果用另外一种方式实现:
itest=0
while read sLine
do
if [ "$sLine" == "katana" ]
then
let itest=$itest+1
echo "itest:$itest"
fi
done << SEF
`echo -e "katana/nlear/nfracnis/nkatana/n"`
SEF
echo "final itest:$itest"
或者使用文件来完成功能:
cat test.txt
katana
lear
francis
katana
itest=0
while read sLine
do
if [ "$sLine" == "katana" ]
then
let itest=$itest+1
echo "itest:$itest"
fi
done <test.txt
执行结果:
itest:1
itest:2
final itest:2
本文原创自无线技术运营空间: http://wireless.qzone.qq.com 及 http://blog.youkuaiyun.com/wireless_tech (专注无线技术运营——无线技术(操作系统/数据库/WEB前端/负载均衡/系统容灾/系统安全/短信接入/WAP接入/3G等)、无线业务运营、无线开放平台、统计分析(用户行为分析/数据挖掘)、CP合作,联系我们:1780551083@qq.com)
本文探讨了在shell脚本中,全局变量在管道操作的while循环内无法正确赋值的问题。通过示例展示了使用不同方式(如redirect输入或临时文件)解决此问题的方法,以确保循环结束后全局变量保留其更新后的值。
28

被折叠的 条评论
为什么被折叠?



