Bash中"while"和"until"之间的区别

Kyr*_*rol 25 bash while-loop

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

我想知道是否可以使用"until"进行越来越多的循环,然后使用while循环.

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

COUNTER=0
     while [ $COUNTER -lt 10 ]; do
         echo The counter is $COUNTER
         let COUNTER+=1 
     done
Run Code Online (Sandbox Code Playgroud)

还有这个

COUNTER=20
     until [ $COUNTER -lt 10 ]; do
         echo COUNTER $COUNTER
         let COUNTER-=1
     done
Run Code Online (Sandbox Code Playgroud)

他们运作良好.

但如果我做相反的事情,例如:

COUNTER=20
     while [ $COUNTER -lt 10 ]; do
         echo COUNTER $COUNTER
         let COUNTER-=1
     done
Run Code Online (Sandbox Code Playgroud)

脚本没有结束.

这是否意味着我们不能在bash中进行一段时间的反向循环?

Oli*_*rth 38

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

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

  • 有没有人告诉过你不要使用你在定义中定义的单词?:) (3认同)

Man*_*nde 14

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

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

COUNTER=20
while [ $COUNTER -lt 10 ]; do
    echo COUNTER $COUNTER
    let COUNTER-=1
done
Run Code Online (Sandbox Code Playgroud)

在第一种情况下,while中提到的条件,即[$ COUNTER -lt 10],保持为false,因此while循环中的代码块根本不会运行.


Vla*_*adp 6

他们相反:

bool b;
while(b) = until(!b)
Run Code Online (Sandbox Code Playgroud)


Rem*_*rio 6

基本上, while & Until 循环仅在满足初始条件时才会执行,想想 while 循环 while,如果当前条件满足,那么它才会工作。但是,until 循环将等待直到满足条件。例如。下面的代码会起作用,因为 5 小于 10,循环体会递增该值,直到恰好达到 10 为止,它将退出。

index=5
until [ $index -gt 10 ]
do
  echo $index
  let index+=1
done
Run Code Online (Sandbox Code Playgroud)

这个例子不起作用,因为 5 最初并不大于 10,只有在循环过程中它才变得更大。

index=5
while [ $index -gt 10 ]
do
  echo $index
  let index+=1
done
Run Code Online (Sandbox Code Playgroud)


Vil*_*las 5

顺便提一句:

COUNTER=20
while [ $COUNTER -lt 10 ]; do
    echo COUNTER $COUNTER
    let COUNTER-=1
done
Run Code Online (Sandbox Code Playgroud)

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