我正在尝试创建一个嵌套的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
如何修改循环以获得我想要的结果! 感谢
答案 0 :(得分:3)
你的逻辑错了。您根本不需要嵌套循环。试试这个:
for ((i=1;i<11;++i)); do
echo "$i:$((i-5*((i-1)/5)))"
done
这使用整数除法从$i
的值中减去正确的5的倍数:
$i
介于1和5之间时,(i-1)/5
为0
,因此不会减去任何内容$i
介于6到10之间时,(i-1)/5
为1
,因此减去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)