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

Posted

技术标签:

【中文标题】Bash 中“while”和“until”的区别【英文标题】:Difference between "while" and "until" in Bash 【发布时间】: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 进行反向循环?

【问题讨论】:

【参考方案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

【讨论】:

以上是关于Bash 中“while”和“until”的区别的主要内容,如果未能解决你的问题,请参考以下文章

bash中while,until,case,select语句结构

[Bash Scripting LOOP]for, while. until

[Bash Scripting LOOP]for, while. until

Bash之until循环

linux while和until循环项目案例

Linux基础之bash脚本进阶篇-循环语句(for,while,until)及其特殊用法