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

前端之家收集整理的这篇文章主要介绍了bash:变量在读取循环结束时丢失值前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我的一个 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,则需要使用命令替换等不同方式而不是管道.

猜你在找的Bash相关文章