1 #!/bin/
sh
2 num=
0
3 cat /etc/
passwd |
while read line
4 do
5 num=$(($num+
1))
6 done
7 echo $num
8
9 linux:~ #
sh a.
sh
10 0
原因:使用for,while,until,if,case这些命令时用到了重定向,那么sh会产生一个子shell来运行它们。num在循环体中能够正确的计数,一旦while执行完毕,子shell完成,其内部的变量numt就消失了。因而得到的结果是循环体外开始赋的值0!
解决:
1 #!/bin/
sh
2
3 num=
0
4 while read line
5 do
6 num=$(($num+
1))
7 done < /etc/
passwd
8 echo $num
9
10 linux:~ #
sh b.
sh
11 10
转载于:https://www.cnblogs.com/ManMonth/p/4286909.html