我不明白 break 命令
I do not understand the break command
在:
#!/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),输出是:
1 0
1 5
3 0
3 5
我想问的是,为什么要打印 3 0
和 3 5
,当脚本被设置为不中断时?脚本没有打印 2 0
和 2 5
,3 0
和 3 5
也应该发出中断信号...
只是一个简单的 break
跳出一个循环 - 在您的例子中是内部 for 循环。
但是,如果您在 break 语句中使用额外的整数,如 break 2
,则跳出指定的循环次数 - 在您的例子中,即 two for 循环。由于嵌套循环不超过两个,并且最外层循环之后没有更多代码,因此实际上与结束脚本相同。
break
的可选参数告诉它要跳出哪个循环。如果省略参数,它会跳出最内层的循环。使用参数 n
它会跳出第 n
个封闭循环。
所以 break 2
跳出 for var1
循环,因为它是第二个封闭循环。如果将其更改为 break
,它会跳出 for var2
循环,因此它会进入 for var1
.
的下一个迭代
总结评论,有两个问题:
- 为什么
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
出现,因为两个循环都会停止。
- 为什么在
brake
之后不打印 2 5
?
这是因为整个内部循环在 break
处停止,所以其他迭代都没有机会 echo
。要跳过当前迭代并立即尝试下一个迭代,请使用 continue
。
在:
#!/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),输出是:
1 0
1 5
3 0
3 5
我想问的是,为什么要打印 3 0
和 3 5
,当脚本被设置为不中断时?脚本没有打印 2 0
和 2 5
,3 0
和 3 5
也应该发出中断信号...
只是一个简单的 break
跳出一个循环 - 在您的例子中是内部 for 循环。
但是,如果您在 break 语句中使用额外的整数,如 break 2
,则跳出指定的循环次数 - 在您的例子中,即 two for 循环。由于嵌套循环不超过两个,并且最外层循环之后没有更多代码,因此实际上与结束脚本相同。
break
的可选参数告诉它要跳出哪个循环。如果省略参数,它会跳出最内层的循环。使用参数 n
它会跳出第 n
个封闭循环。
所以 break 2
跳出 for var1
循环,因为它是第二个封闭循环。如果将其更改为 break
,它会跳出 for var2
循环,因此它会进入 for var1
.
总结评论,有两个问题:
- 为什么
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
出现,因为两个循环都会停止。
- 为什么在
brake
之后不打印2 5
?
这是因为整个内部循环在 break
处停止,所以其他迭代都没有机会 echo
。要跳过当前迭代并立即尝试下一个迭代,请使用 continue
。