2015-04-22 200 views
0

我試圖創建一個嵌套的for循環將從1數到10,第二或嵌套循環將從1我雖然數到5創建嵌套for循環bash腳本

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

請注意您的操作與'echo {1..5} {1..5}'類似。 – fedorqui

回答

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
a=0 
for ((i=1;i<11;i++)) 
do 
    a=$((a%5)) 
    ((a++)) 
    echo $i:$a 
done 

如果你真的需要它使用2個循環,try

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

我也是這麼做的,這是錯誤的! –

+0

如果我想要使用嵌套循環,我將如何得到相同的結果! –

+0

...好吧,其實我沒有這樣做,我使用了正確的語法(它應該是'a = $((i%5))'。無論哪種方式,輸出都是不正確的! –

1

在這種情況下,你不能使用嵌套循環。你所擁有的是第二個共同變量,即與外部循環變量類似的增量。它完全不依賴於外部循環變量。

這意味着你可以計算的ai值:

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。

1

我知道@AaronDigulla的答案是OP想要的。這是獲得輸出的另一種方式:)

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