shell 脚本:嵌套循环并继续

问题描述 投票:0回答:2
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
这样的东西来逃避外循环?

shell continue
2个回答
1
投票

“break”和“Continue”是“goto”的近亲,通常应该避免,因为它们引入了一些无名的条件,导致程序控制流的跳跃。如果存在需要跳转到程序的其他部分的条件,下一个阅读它的人会感谢您为该条件命名,这样他们就不必弄清楚它!

就您而言,您的脚本可以写得更简洁:

dataInRange=1
while [condition -a $dataInRange]
do
  for [condition -a $dataInRange]
  do
    if [ "$x" > 3 ];then
      dataInRange=0
    fi
  done
done

0
投票

这个 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
© www.soinside.com 2019 - 2024. All rights reserved.