在bash脚本中创建嵌套的for循环

时间:2015-04-22 15:16:45

标签: linux bash

我正在尝试创建一个嵌套的for循环,它将从1到10计数,第二个或嵌套循环将从1到5计数。

for ((i=1;i<11;i++));
do
     for ((a=1;a<6;a++));
     do
         echo $i:$a
     done
done

我认为这个循环的输出是:

1:1
2:2
3:3
4:4
5:5
6:1
7:2
8:3
9:4
10:5

但输出是

1:1
1:2
1:3
1:4
1:5
2:1
...
2:5
3:1
...
and same thing till 10:5

如何修改循环以获得我想要的结果! 感谢

4 个答案:

答案 0 :(得分:3)

你的逻辑错了。您根本不需要嵌套循环。试试这个:

for ((i=1;i<11;++i)); do
    echo "$i:$((i-5*((i-1)/5)))"
done

这使用整数除法从$i的值中减去正确的5的倍数:

  • $i介于1和5之间时,(i-1)/50,因此不会减去任何内容
  • $i介于6到10之间时,(i-1)/51,因此减去5

答案 1 :(得分:1)

a=0
for ((i=1;i<11;i++))
do
    a=$((a%5))
    ((a++))
    echo $i:$a
done

如果真的需要使用2个循环,请尝试

for ((i=1;i<3;i++))
do
    for ((a=1;a<6;a++))
    do
        echo "$((i*a)):$a"
    done
done

答案 2 :(得分:1)

在这种情况下,您不能使用嵌套循环。你拥有的是第二个共变量,即增量类似于外部循环变量的东西。它完全不依赖于外部循环变量。

这意味着您可以从a计算i的值:

for ((i=1;i<11;i++)); do
    ((a=((i-1)%5)+1))
    echo $i:$a
done

%5将确保该值始终介于0和4之间。这意味着我们需要i从0到9运行,这会给我们i-1。之后,我们需要使用+1将0 ... 4移动到0 ... 5。

答案 3 :(得分:1)

我知道@ AaronDigulla的回答是OP想要的。这是另一种获得输出的方法:)

paste -d':' <(seq 10) <(seq 5;seq 5)