2015-07-21 69 views
0

外環外循環只執行一次,但應執行四次:bash的嵌套而:下面的bash腳本只執行一次

#!/bin/bash 
NX="4" 
NY="6" 
echo "NX = $NX, NY = $NY" 
IX="0" 
IY="0" 
while ((IX < NX)) 
do 
    while ((IY < NY)) 
    do 
    echo "IX = $IX, IY = $IY"; 
    IY=$((IY+1)) 
    done; 

    IX=$((IX+1)) 
done 

我也曾嘗試聲明循環變量declare -i NX=0 (不含引號),但無論哪種方式我得到的輸出是

NX = 4, NY = 6 
IX = 0, IY = 0 
IX = 0, IY = 1 
IX = 0, IY = 2 
IX = 0, IY = 3 
IX = 0, IY = 4 
IX = 0, IY = 5 

這是什麼原因,我該如何解決它?請注意,我寧願離開NX="4"NY="6"(帶引號),因爲這些實際上來自另一個腳本。

+3

在第一個'do'後面寫'echo「IX = $ IX」',你會看到它完美循環!也就是說,它從0到3循環。給你更多關於你想做什麼的背景,所以我們可以提供幫助。 – fedorqui

+3

爲什麼使用'while'循環而不是'for'來啓動? (for((ix = 0; ix

+0

@CharlesDuffy'while'來自我編輯的skript以滿足我的需求。我只是沒有包括變量重置,因此錯誤。當然,「for」工作正常 - 但我對條件陳述的大量備選方案感到如此困惑,以至於我不想深入研究。 – Christoph

回答

4

在達到5之後,您需要將IY重置爲0。更改爲:

#!/bin/bash 
NX="4" 
NY="6" 
echo "NX = $NX, NY = $NY" 
IX="0" 
IY="0" 
while ((IX < NX)) 
do 
    while ((IY < NY)) 
    do 
    echo "IX = $IX, IY = $IY"; 
    IY=$((IY+1)) 
    done; 
    IY="0" 
    IX=$((IX+1)) 
done 
+0

頭腦風暴。當然... – Christoph