加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

bash:变量在读取循环结束时丢失值

发布时间:2020-12-15 18:43:11 所属栏目:安全 来源:网络整理
导读:我的一个 shell脚本有问题.问了几个同事,但他们都只是摇头(经过一些刮伤),所以我来这里寻求答案. 根据我的理解,下面的shell脚本应该打
我的一个 shell脚本有问题.问了几个同事,但他们都只是摇头(经过一些刮伤),所以我来这里寻求答案.

根据我的理解,下面的shell脚本应该打印“Count is 5”作为最后一行.除了它没有.它打印“Count is 0”.如果“while read”被任何其他类型的循环替换,它就可以正常工作.这是脚本:

echo "1">input.data
echo "2">>input.data
echo "3">>input.data
echo "4">>input.data
echo "5">>input.data

CNT=0 

cat input.data | while read ;
do
  let CNT++;
  echo "Counting to $CNT"
done 
echo "Count is $CNT"

为什么会发生这种情况,我该如何预防呢?我在Debian Lenny和Squeeze中尝试了这个,结果相同(即bash 3.2.39和bash 4.1.5.
我完全承认不是一个shell脚本向导,所以任何指针都会受到赞赏.

参见@ Bash FAQ entry #24: “I set variables in a loop. Why do they suddenly disappear after the loop terminates? Or,why can’t I pipe data to read?”参数(最近归档的 here).

摘要:仅从bash 4.2及更高版本支持此功能.如果使用bash,则需要使用命令替换等不同方式而不是管道.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读