直到命令如何在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))比較可能會更方便, –