BASH嵌套循环中break的正确用法:如何仅跳出内层循环?
Bash嵌套循环中break的使用问题
问题场景
学习Bash循环机制时,编写了如下嵌套for循环代码:
echo "For loop begins" for (( a = 1; a < 10; a++ )) do echo -e "\tOuter loop ${a}" for (( b = 1; b < 100; b++ )) do if [[ ${b} -gt 5 ]] then break 2 fi echo -e "\t\tInner loop ${b}" done done echo "For loop completed"
运行后发现使用break 2时直接跳出了内外层循环,仅执行了1次外层循环,输出结果如下:
genius@GeniusDPhil-hp250g1notebookpc:~$ ./loop.sh For loop begins Outer loop 1 Inner loop 1 Inner loop 2 Inner loop 3 Inner loop 4 Inner loop 5 For loop completed genius@GeniusDPhil-hp250g1notebookpc:~$
尝试修改循环条件为for (( a = 1; a <= 10; a++ ))和for (( b = 1; b <= 100; b++ )),结果仍未改变。期望外层循环执行10次,因此疑问:break是否会跳出外层循环?该如何正确使用break?
解答
break的作用机制
break N就是用来跳出N层循环的,你使用的break 2会直接跳出当前内层循环(第1层)和外层循环(第2层),所以外层循环只执行了1次就终止了,这是Bash的正常行为。实现外层循环执行10次的修改方法
如果想让外层循环完整执行10次,只需要把break 2改成不带参数的break——不带数字的break只会跳出当前所在的内层循环,外层循环会继续执行下一次迭代。
修改后的代码如下:
echo "For loop begins" for (( a = 1; a <= 10; a++ )) # 改成a<=10确保执行10次 do echo -e "\tOuter loop ${a}" for (( b = 1; b < 100; b++ )) do if [[ ${b} -gt 5 ]] then break # 仅跳出内层循环 fi echo -e "\t\tInner loop ${b}" done done echo "For loop completed"
- break的常见用法总结
break:仅跳出当前所在的最内层循环break N:跳出从当前循环开始往上数的N层循环(当前循环算第1层)
内容的提问来源于stack exchange,提问作者SinaMathew
相关产品推荐
相关产品推荐

