【问题标题】:Difference between "while" and "until" in BashBash 中“while”和“until”的区别
【发布时间】:2012-01-07 10:26:09
【问题描述】:

while 和 until 之间的真正区别是什么?

我想知道是否可以使用“until”进行递增循环,使用 while 进行递减循环。

因为我看到了如果我这样做

COUNTER=0
     while [ $COUNTER -lt 10 ]; do
         echo The counter is $COUNTER
         let COUNTER+=1 
     done

还有这个

COUNTER=20
     until [ $COUNTER -lt 10 ]; do
         echo COUNTER $COUNTER
         let COUNTER-=1
     done

他们运作良好。

但如果我反其道而行之,例如:

COUNTER=20
     while [ $COUNTER -lt 10 ]; do
         echo COUNTER $COUNTER
         let COUNTER-=1
     done

脚本没有结束。

这是否意味着我们不能在 bash 中使用 while 进行反向循环?

【问题讨论】:

    标签: bash while-loop


    【解决方案1】:

    while 运行循环条件为真。 until 运行循环直到条件为真(即条件为假)。

    http://www.gnu.org/software/bash/manual/bashref.html#Looping-Constructs

    【讨论】:

    • 有没有人告诉过你不要使用你在定义中定义的词? :)
    • 为了开心,while 是一个占位符,因此可以是任何字符集的任意组合,例如 wh!13 ;-O
    【解决方案2】:

    它们是相反的:

    bool b;
    while(b) = until(!b)
    

    【讨论】:

      【解决方案3】:

      顺便说一句:

      COUNTER=20
      while [ $COUNTER -lt 10 ]; do
          echo COUNTER $COUNTER
          let COUNTER-=1
      done
      

      这不会永远执行。在循环条件的第一次评估期间,计数器 (20) 不小于 10,因此它将立即终止。

      【讨论】:

        【解决方案4】:

        While Loop 在条件为 true 时执行代码块(包含在 do...done 中)并一直执行到条件变为 false。一旦条件变为 false,while 循环就会终止。

        Until 循环 在条件为 false 时执行代码块(包含在 do...done 中)并继续执行直到条件变为 true。一旦条件变为true,直到循环终止。

        COUNTER=20
        while [ $COUNTER -lt 10 ]; do
            echo COUNTER $COUNTER
            let COUNTER-=1
        done
        

        第一次,while 中提到的条件,即 [ $COUNTER -lt 10 ] 为 false,因此 while 循环内的代码块根本不会运行。

        【讨论】:

          【解决方案5】:

          基本上,while 和 until 循环只有在满足初始条件时才会执行,想想 while 循环 while,如果只有满足当前条件,它就会工作。但是,直到循环将等待直到满足条件。例如。以下将起作用,因为 5 小于 10,循环体会递增该值,直到恰好是 10 它将退出。

          index=5
          until [ $index -gt 10 ]
          do
            echo $index
            let index+=1
          done
          

          这个例子是行不通的,因为 5 最初并不大于 10,只有在循环过程中才会变得更大。

          index=5
          while [ $index -gt 10 ]
          do
            echo $index
            let index+=1
          done
          

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2022-08-19
            • 2023-03-29
            • 2018-03-16
            • 1970-01-01
            • 2019-06-24
            • 1970-01-01
            • 1970-01-01
            • 2014-10-03
            相关资源
            最近更新 更多