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