2014-07-06 131 views
0

我試圖打印嵌套for循環的結果一次,但我得到了循環中各種組合的結果。如何打印嵌套for循環的結果一次

這裏是我的代碼

for run in 1 2 
do 
    for value in 3000 5000 1000 
    do 
     for percent in 30 40 50 
     do 
      echo "${percent}percent of ${value}" 
     done 
    done 
done 

我獲得以下的輸出:

for run1:30percent of 3000 
for run1:40percent of 3000 
for run1:50percent of 3000 
for run1:30percent of 5000 
for run1:40percent of 5000 
for run1:50percent of 5000 
for run1:30percent of 1000 
for run1:40percent of 1000 
for run1:50percent of 1000 
for run2:30percent of 3000 
for run2:40percent of 3000 
for run2:50percent of 3000 
for run2:30percent of 5000 
for run2:40percent of 5000 
for run2:50percent of 5000 
for run2:30percent of 1000 
for run2:40percent of 1000 
for run2:50percent of 1000 

我想打印輸出

for run1:30percent of 3000 
for run1:40percent of 5000 
for run1:50percent of 1000 
for run2:30percent of 3000 
for run2:40percent of 5000 
for run2:50percent of 1000 

回答

2

這不是循環的工作方式。

您可能想要使用兩個數組和一個從0到${#array}的循環,然後使用循環控制變量爲每個並行循環中的正確條目建立索引。

values=(3000 5000 1000) 
percents=(30 40 50) 
for ((i=0; i<=${#values}; i++)); do 
    echo "${percents[$i]}percent of ${value[$i]}" 
done 
0

ü不需要第三for循環。只需將第三個循環的數據存儲在數組中,並在第二個循環後直接打印

1
for run in 1 2; do 
    for pair in 30:3000 40:4000 50:1000; do 
     IFS=: read percent value <<< "$pair" 
     echo "for run${run}:${percent}percent of ${value}" 
    done 
done 

輸出:

for run1:30percent of 3000 
for run1:40percent of 4000 
for run1:50percent of 1000 
for run2:30percent of 3000 
for run2:40percent of 4000 
for run2:50percent of 1000 
0

好吧,既然你沒有指定你實際上是在做什麼:

for run in 1 2; do 
    for i in {1..3}; do 
     echo "for run$run: $(((i + 2) * 10))percent of $((i * 2000 % 6000 + 1000))" 
    done 
done 

Teehee。