在嵌套循环 (BASH) 中突破内部循环

Break out of inner loop in a nested loop (BASH)

提问人:Sina Mathew 提问时间:9/27/2023 更新时间:9/27/2023 访问量:44

问:

我决定玩循环只是为了了解循环在 bash 中是如何工作的。 但我是那个被玩的人。 我所知道的是中断调用有助于停止特定循环

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 调用也突破了外部循环。

我已经尝试将我的 for 循环连接到,第二个将 put 而不是 put,但我仍然得到相同的输出。for (( a = 1; a <= 10; a++ ))for (( b = 1; b <= 100; b++ ))<=<

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:~$ 

我原以为外环会跑 10 次,也会让我离开外环吗?如果是,我该如何正确使用?如果没有,问题是什么?breakbreak

注意:我体内的程序员已经 3 个月大了。

Linux Bash Shell for-循环 中断

评论

0赞 Renaud Pacalet 9/27/2023
外部循环不能运行 10 次,因为 1 包含和 10 排除之间只有 9 个整数:1、2、...、9。 此外,当您用 断开两个循环时,只会执行内部循环的 5 次迭代,并且将执行外部循环的一次迭代。你忘了解释你想要什么(请编辑你的问题以添加这个),但如果你只想打破内部循环,请使用(或者只是,它是一样的)。break 2break 1break
0赞 Renaud Pacalet 9/27/2023
From bash manual: break [n]:从 for、while、untill 或 select 循环中退出。如果指定了 n,则中断 n 个级别。n 必须为 >= 1。如果 n 大于封闭环路的数量,则退出所有封闭环路。返回值为 0,除非 n 不大于或等于 1。
0赞 Renaud Pacalet 9/27/2023
注意:您可以在算术测试中使用更简单的算术复合命令:,而不是条件表达式。(( ...))if (( b > 5 )); then...[[ ${b} -gt 5 ]]
0赞 Kaz 9/27/2023
的嵌套不计入循环级别。 表示跳出循环的嵌套级别,而不是嵌套循环级别或其他类型的语句。默认值为 1:突破最内层的封闭循环。 意味着突破最里面的封闭循环和包围它的循环,依此类推。if [[ ${b} -gt 5 ]]; then ... fibreak nnnnbreak 2
0赞 Kaz 9/27/2023
在了解之前,您是如何到达的?奇怪的是,唯一错误的是我们必须删除脚本中的脚本;是什么促使你添加这个?break 2break2

答:

0赞 Gilles Quénot 9/27/2023 #1

我会做什么:

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
                fi
                echo -e "\t\tInner loop ${b}"
        done
done
echo "For loop completed"

注意只使用,因为也打破了外循环。如果你需要像我在这里一样迭代 10 次,你的代码逻辑是错误的。breakbreak 2

检查

man bash | less +/'^ +break'

break [n]
从 for、while、untill 或 select 循环中退出。如果指定了 n,则中断 n 个级别。n 必须≥ 1。如果 n iq 大于封闭循环数,则退出所有封闭循环。返回值为 0,除非 n 不大于或等于 1。


使用现代 ,更好地使用if (( b > 5 ))


((...))和算术命令,如果表达式为非零,则返回退出状态 0,如果表达式为零,则返回 1。也用作“let”的同义词,如果需要副作用(分配)。$((...))

查看 http://mywiki.wooledge.org/ArithmeticExpression

评论

0赞 Sina Mathew 9/27/2023
感谢您的回答、资源和快速响应。:)