在执行“ do”之前的代码时奇怪(无限)while循环

时间:2019-01-16 10:43:43

标签: bash

我在中学教书。该班级的学校和学生都附带了此代码,问我为什么循环永远不会结束。

1 counter=1  
2 while (( counter < 3 ))  
3 echo $LINENO: $counter  
4 do 
5    ((counter++))
6 done
7 echo $LINENO: The end

这会导致无限循环,我真的不知道为什么:-(

通过bashdb运行此代码,它表明第2行的测试不影响流程:执行第3行和第5行,然后流程返回第2行以再次执行测试,执行第4行和第5行,然后循环永远不会跳过第6行中的“完成”。

脚本会继续打印计数器值并递增它。

如果我转置第3和第4行,则循环将照常运行,并在2次迭代后停止。

我已经在OSX和Linux上的Bash v.4中测试了此代码。

关于此循环行为的任何想法吗?谢谢大家:-)

1 个答案:

答案 0 :(得分:6)

while循环中使用的条件是whiledo之间的所有条件。在这种情况下,条件包括第3行(echo),该行每次返回0。比较的结果将被忽略,并使用echo的退出状态,如help while中所述:

  

同时:while COMMANDS; do COMMANDS; done

     

只要测试成功,就执行命令。

     

展开并执行COMMANDS,只要输入       while命令的退出状态为零。