【经验总结】全局变量在循环中不能赋值的问题

本文探讨了在shell脚本中,全局变量在管道操作的while循环内无法正确赋值的问题。通过示例展示了使用不同方式(如redirect输入或临时文件)解决此问题的方法,以确保循环结束后全局变量保留其更新后的值。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

全局变量在循环中不能赋值的问题

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)

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值