嵌套For循环计数器重置

时间:2014-10-06 22:05:24

标签: bash shell ubuntu nested-loops

我正在尝试为使用列表作为循环计数器的循环运行嵌套。问题是,一旦'delta'循环达到100,它就不会重置为0.'edge'的问题也是如此。

我尝试了这个,但它似乎不适用于我的循环。 http://tldp.org/LDP/abs/html/nestedloops.html

这里有什么想法吗?这是我的代码:

#!/bin/sh

threads="1 2 4 8 16 32 64 96 128 160 192 224 256"
delta="0 10 20 30 40 50 60 70 80 90 100"
edges="16 8192"
nodes="16384"

for threads in $threads
do
    for delta in $delta
    do
        for edges in $edges
        do
            for nodes in $nodes
            do
                printf "\n"
                echo $threads
                echo $delta
                echo $edges
                echo $nodes
            done
        done
    done
done

预期产出:

1 0 16 16384 
1 0 8192 16384 
1 10 16 16384 
1 10 8192 16384 
1 20 16 16384 
1 20 8192 16384 

1 个答案:

答案 0 :(得分:2)

当使用这样的for循环时,请确保为循环变量指定的名称与您迭代的变量不同。

使用for threads in $threads会使区分循环变量(threads)和循环的事物($threads)变得混乱。

当您稍后致电echo $threads时,bash不知道您指的是第一个。

在这种情况下,您可以将循环声明更改为for n in nodesfor t in threads,然后在最内层循环内将echo更改为$n$t获得所需的输出。