2014-07-22 125 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