直到Bash命令

时间:2014-07-22 04:58:48

标签: bash

在bash中,until命令如何工作?对于以下代码,

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

我认为一旦它到达until [ 1 -lt 1 ],它就会失败并因此将数字9打印为1.但它打印9到0.我错过了什么?什么时候证明1 < 1是真的?

2 个答案:

答案 0 :(得分:2)

首先只是为了覆盖基地:

如果控制表达式为真,则执行一段代码,并且只有在为假(或在执行的代码中找到显式中断)时才会停止。

直到循环几乎等于while循环,除了在控制表达式求值为false时执行代码,因为它们在该点处相等。

最终,您的问题的回答是:

实际上小于或等于的显式运算符。

<强> -lt 小于

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

<强> -le 小于或等于

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

大声读出时until [ 1 -lt 1 ]语句会出现,&#34;直到1小于1&#34;

当&#34;最后&#34; 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 :(得分:1)

要添加,更有效的方法(在编码空间方面)是使用for循环:

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

从您实际使用的第一个数字初始化您的计数器也是一个好习惯,而不是为了获得第一个数字而扣除或增加的数字。除非你的效率高于可读性,否则可能会受到质疑。