我不明白break命令

时间:2016-11-09 22:11:11

标签: linux bash shell unix break

在:

1 0
1 5

输出是:

1 0
1 5
3 0
3 5

然后脚本停止。

如果删除break命令的参数(2),输出为:

3 0

我要问的是,为什么3 52 0被打印出来,当脚本不受破坏时?脚本没有打印2 53 0,而3 5settings.py也应该表示中断......

3 个答案:

答案 0 :(得分:1)

break的可选参数告诉它要突破哪个循环。如果省略该参数,则会突破最内层循环。使用参数n,它会突破n封闭循环。

所以break 2突破for var1循环,因为它是第二个封闭循环。如果您将其更改为break,则它会突破for var2循环,因此会转到for var1的下一次迭代。

答案 1 :(得分:1)

总结评论,有两个问题:

  • 为什么在3 0之后打印break,而不是在break 2之后打印?

这是因为条件([ $var1 -eq 2 -a $var2 -eq 0 ])检查了相等而不是-ge,大于或等于。使用-ge时,两个数字都不会更高echo

break 2改为退出两个循环,从而在这种特定情况下产生相同的效果。如果循环为for var1 in 1 2 0,则break 2也会阻止0 0显示,因为两个循环都已停止。

  • 为什么在2 5后才会打印brake

这是因为整个内循环在break上停止,因此没有其他迭代有机会echo。要改为跳过当前迭代并立即尝试下一个迭代,请使用continue

答案 2 :(得分:0)

只是一个简单的break突破了一个循环 - 在你的情况下内部for循环。 但是,如果在break语句中使用了一个额外的整数,就像在break 2中一样,那么就会超出指定数量的循环 - 在你的情况下,循环两个。由于只有两个嵌套循环,并且在最外层循环之后没有更多代码,因此它实际上与结束脚本相同。