Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/27.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linux 我不懂break命令_Linux_Bash_Shell_Unix_Break - Fatal编程技术网

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
aka
break
只会停止内部循环(外部循环将在下一次迭代中继续)。要停止整个脚本,请使用
exit
谢谢您的评论,但我仍然不明白为什么
30
35
是输出?它们都应该激活中断,就像
20
25
你的条件是
$var1-eq 2-a$var2-eq 0
30
不等于
20
。您的意思是将
-gt
改为“大于”吗?如果您希望在到达
2 0
时停止整个脚本,而不继续执行任何操作,则可以使用
exit
(或
break 2
结束两个循环,就像您所做的那样)哇,我很笨。。。是的,我是想用gt的。。。。这是一个非常好的主题问题,包含完整的源代码以及实际和预期的输出。由您决定是否接受答案(单击答案旁边的复选标记)或关闭/删除答案,因为“一个简单的印刷错误[…]不太可能帮助未来的读者”