2014-07-22 71 views
0

直到命令如何在bash中工作?对于下面的代码,直到命令在Bash中

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

我认为,一旦它到达until [ 1 -lt 1 ],它会失败,因此打印数字9比1,但它打印9 0。我失去了什么?当1 < 1被证明是真的?

+0

echo $(( - i))在一次操作中合并递减,然后回显i。 ((我<1))比较可能会更方便, –

回答

2

首先只是以覆盖所述基板:

如果控制表达式为真时执行的一段代码,而当它是假的(或明确的断裂是在执行代码中发现只有停止。

直到环几乎等于while循环,不同之处在于同时控制表达式为假,因为他们在这一点上是相等执行的代码。

虽然最终你的问题的answere d与:

实际上有一个明确的运算符小于或等于

-lt 小于

if [ "$a" -lt "$b" ] 

-le 小于或等于

if [ "$a" -le "$b" ] 

阅读时出声来会去的until [ 1 -lt 1 ]声明,“直到1是小于1“。

当在“最后”迭代中1 = 1时,$i在循环内将减少为零,并且随着循环的下一次迭代将爆发而被打印。

#!/bin/bash 
COUNTER=20 
echo COUNTER OUTSIDE LOOP $COUNTER 
until [ $COUNTER -lt 10 ]; do 
    echo COUNTER $COUNTER 
    let COUNTER-=1 
done 
1

要添加,更有效的方式做到这一点(在编码空间而言)是使用for循环:

for ((i = 9; i >= 0; --i)); do 
    echo "$i" 
done 

而且,这也是一个很好的练习从你实际使用的第一个数字初始化你的柜台,而不是为了获得第一个数字而被扣除或增加的数字。除非你追求可读性的效率,否则可能会受到质疑。

+0

你能解释一下你的意思吗?“从你实际使用的第一个数字初始化你的计数器”? –

+0

他需要先打印9,但在他的循环中,他从10开始。 – konsolebox