2015-07-21 62 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