在bash中,until命令如何工作?对于以下代码,
i=10;
until [ $i -lt 1 ]; do
let i--
echo $i
done
我认为一旦它到达until [ 1 -lt 1 ]
,它就会失败并因此将数字9打印为1.但它打印9到0.我错过了什么?什么时候证明1 < 1
是真的?
答案 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
从您实际使用的第一个数字初始化您的计数器也是一个好习惯,而不是为了获得第一个数字而扣除或增加的数字。除非你的效率高于可读性,否则可能会受到质疑。