我正在尝试为使用列表作为循环计数器的循环运行嵌套。问题是,一旦'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
答案 0 :(得分:2)
当使用这样的for
循环时,请确保为循环变量指定的名称与您迭代的变量不同。
使用for threads in $threads
会使区分循环变量(threads
)和循环的事物($threads
)变得混乱。
当您稍后致电echo $threads
时,bash不知道您指的是第一个。
在这种情况下,您可以将循环声明更改为for n in nodes
或for t in threads
,然后在最内层循环内将echo
更改为$n
和$t
获得所需的输出。