while [condition]
do
for [condition]
do
if [ "$x" > 3 ];then
break
fi
done
if [ "$x" > 3 ];then
continue
fi
done
在上面的脚本中,我必须测试
"$x" > 3
两次。实际上,我第一次测试它时,如果是 true,我想跳出 while 循环并继续下一个 while 循环。
有没有更简单的方法,让我可以使用像
continue 2
这样的东西来逃避外循环?
“break”和“Continue”是“goto”的近亲,通常应该避免,因为它们引入了一些无名的条件,导致程序控制流的跳跃。如果存在需要跳转到程序的其他部分的条件,下一个阅读它的人会感谢您为该条件命名,这样他们就不必弄清楚它!
就您而言,您的脚本可以写得更简洁:
dataInRange=1
while [condition -a $dataInRange]
do
for [condition -a $dataInRange]
do
if [ "$x" > 3 ];then
dataInRange=0
fi
done
done
这个 bash 脚本帮助我更好地理解如何从嵌套循环继续执行外循环。
基本上你需要使用 continue [n],其中 n 是循环计数 FROM 你要编写的循环 continue TO 外部循环
#!/bin/bash
for A in {1..2}; do
echo "Loop A: A$A"
for B in {1..2}; do
echo " Loop B: B$B"
for C in {1..2}; do
echo " Loop C: C$C"
if [[ $C -eq 2 ]]; then
echo " Skipping iteration of Loop A from inside Loop C"
continue 3 # SKIP current iteration on Loop A
fi
for D in {1..2}; do
echo " Loop D: D$D"
if [[ $D -eq 1 ]]; then
echo " Skipping iteration of Loop C from inside Loop D"
continue 2 # SKIP current iteration on Loop C
fi
done
done
done
done
它打印:
Loop A: A1
Loop B: B1
Loop C: C1
Loop D: D1
Skipping iteration of Loop C from inside Loop D
Loop C: C2
Skipping iteration of Loop A from inside Loop C
Loop A: A2
Loop B: B1
Loop C: C1
Loop D: D1
Skipping iteration of Loop C from inside Loop D
Loop C: C2
Skipping iteration of Loop A from inside Loop C