linux 在嵌套循环中跳出内部循环(BASH)

6ie5vjzr  于 2023-10-16  发布在  Linux
关注(0)|答案(1)|浏览(123)

我决定玩循环只是为了了解循环在bash中是如何工作的。但我才是那个被耍的人。我只知道break调用可以帮助停止一个特定的循环

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循环改为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次,break也会让我退出外循环吗?如何正确使用break?如果没有,那是什么问题?

*注: 我的程序员是3个月大。

qfe3c7zg

qfe3c7zg1#

我会怎么做:

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"

注意只使用break,因为break 2也会破坏外部循环。如果你需要像我在这里做的那样重复10次,那么你的代码的逻辑是错误的。
检查

man bash | less +/'^ +break'

break [n]
从for、while、until或select循环中退出。如果指定了n,则中断n个级别。n必须≥ 1。如果n iq大于封闭循环的数量,则退出所有封闭循环。除非n不大于或等于1,否则返回值为0。
使用现代bash,最好使用if (( b > 5 ))
((...))$((...))是算术命令,如果表达式为非零,则返回退出状态0,如果表达式为零,则返回退出状态1。如果需要副作用(赋值),也用作“let”的同义词。
参见http://mywiki.wooledge.org/ArithmeticExpression

相关问题