直到命令如何在bash中工作?对于下面的代码,直到命令在Bash中
i=10; until [ $i -lt 1 ]; do let i-- echo $i done
我认为,一旦它到达until [ 1 -lt 1 ]
,它会失败,因此打印数字9比1,但它打印9 0。我失去了什么?当1 < 1
被证明是真的?
直到命令如何在bash中工作?对于下面的代码,直到命令在Bash中
i=10; until [ $i -lt 1 ]; do let i-- echo $i done
我认为,一旦它到达until [ 1 -lt 1 ]
,它会失败,因此打印数字9比1,但它打印9 0。我失去了什么?当1 < 1
被证明是真的?
首先只是以覆盖所述基板:
的而如果控制表达式为真时执行的一段代码,而当它是假的(或明确的断裂是在执行代码中发现只有停止。
的直到环几乎等于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
要添加,更有效的方式做到这一点(在编码空间而言)是使用for
循环:
for ((i = 9; i >= 0; --i)); do
echo "$i"
done
而且,这也是一个很好的练习从你实际使用的第一个数字初始化你的柜台,而不是为了获得第一个数字而被扣除或增加的数字。除非你追求可读性的效率,否则可能会受到质疑。
你能解释一下你的意思吗?“从你实际使用的第一个数字初始化你的计数器”? –
他需要先打印9,但在他的循环中,他从10开始。 – konsolebox
echo $(( - i))在一次操作中合并递减,然后回显i。 ((我<1))比较可能会更方便, –