全局变量在循环中不能赋值的问题
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)