我在中学教书。该班级的学校和学生都附带了此代码,问我为什么循环永远不会结束。
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中测试了此代码。
关于此循环行为的任何想法吗?谢谢大家:-)
答案 0 :(得分:6)
while循环中使用的条件是while
和do
之间的所有条件。在这种情况下,条件包括第3行(echo
),该行每次返回0。比较的结果将被忽略,并使用echo
的退出状态,如help while
中所述:
同时:
while COMMANDS; do COMMANDS; done
只要测试成功,就执行命令。
展开并执行COMMANDS,只要输入
while
命令的退出状态为零。