Linux 我不懂break命令
在: 输出为:Linux 我不懂break命令,linux,bash,shell,unix,break,Linux,Bash,Shell,Unix,Break,在: 输出为: #!/bin/sh for var1 in 1 2 3 do for var2 in 0 5 do if [ $var1 -eq 2 -a $var2 -eq 0 ] then break 2 else echo "$var1 $var2" fi done done 1 0 1 5 然后脚本停止 但是,如果删除break命令的参数(2),则输出为: #!/bin/sh f
#!/bin/sh
for var1 in 1 2 3
do
for var2 in 0 5
do
if [ $var1 -eq 2 -a $var2 -eq 0 ]
then
break 2
else
echo "$var1 $var2"
fi
done
done
1 0
1 5
然后脚本停止
但是,如果删除break命令的参数(2),则输出为:
#!/bin/sh
for var1 in 1 2 3
do
for var2 in 0 5
do
if [ $var1 -eq 2 -a $var2 -eq 0 ]
then
break 2
else
echo "$var1 $var2"
fi
done
done
1 0
1 5
我想问的是,为什么要打印
3 0
和3 5
,而脚本条件是不中断?脚本没有打印20
和25
,并且30
和35
也应该发出中断的信号…只是一个简单的中断
从一个循环中中断-在您的例子中是内部for循环。
但是,如果在break语句中使用一个额外的整数,如在
break 2
中,则会从指定数量的循环中断开—在您的示例中,这是两个for循环。由于嵌套循环不超过两个,且最外层循环后没有更多代码,因此这实际上与结束脚本相同。break的可选参数告诉它要中断哪个循环。如果省略参数,它将从最内部的循环中断。通过一个参数n
,它脱离了n
th封闭循环
因此,
break 2
中断了var1的循环,因为它是第二个封闭循环。如果您将其更改为break
,它只是中断了var2的循环,因此它将转到var1的的下一次迭代来总结注释,有两个问题:
- 为什么
3 0
在break
之后打印,而不是在break 2
之后打印李>
这是因为条件([$var1-eq 2-a$var2-eq 0]
)检查是否相等,而不是大于或等于-ge
。使用-ge
时,如果两个数字都较大,则不会出现回声
break 2
反而退出了两个循环,从而在这种特殊情况下产生了相同的效果。如果12 0中var1的循环是,中断2
也会阻止0 0
显示,因为两个循环都会停止
- 为什么
2 5
在制动后不打印
这是因为整个内部循环在中断时停止
,因此没有其他迭代有机会回送
。要跳过当前迭代并立即尝试下一个迭代,请使用continue
break 2
将停止内环和外环break 1
akabreak
只会停止内部循环(外部循环将在下一次迭代中继续)。要停止整个脚本,请使用exit
谢谢您的评论,但我仍然不明白为什么30
和35
是输出?它们都应该激活中断,就像20
和25
你的条件是$var1-eq 2-a$var2-eq 0
,30
不等于20
。您的意思是将-gt
改为“大于”吗?如果您希望在到达2 0
时停止整个脚本,而不继续执行任何操作,则可以使用exit
(或break 2
结束两个循环,就像您所做的那样)哇,我很笨。。。是的,我是想用gt的。。。。这是一个非常好的主题问题,包含完整的源代码以及实际和预期的输出。由您决定是否接受答案(单击答案旁边的复选标记)或关闭/删除答案,因为“一个简单的印刷错误[…]不太可能帮助未来的读者”