Bash中“while”和“until”之间的区别

时间:2011-11-27 18:09:28

标签: bash while-loop

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进行反向循环?

5 个答案:

答案 0 :(得分:38)

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

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

答案 1 :(得分:12)

While循环执行代码块(包含在 do ... done 中)当条件为 true 时继续执行条件变为 false 。条件变为 false 后,while循环终止。

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

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

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

答案 2 :(得分:6)

他们正好相反:

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

答案 3 :(得分:4)

顺便说一下:

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

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

答案 4 :(得分:2)

基本上,while&直到循环只有在满足初始条件时才会执行,想一想while循环while,如果仅满足当前条件则它将起作用。但是,直到循环将等待直到满足条件为止。例如。以下内容将起作用,因为5小于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