如何打印嵌套for循环的结果一次

时间:2014-07-06 12:06:30

标签: bash

我正在尝试打印嵌套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

4 个答案:

答案 0 :(得分: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

答案 1 :(得分: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

答案 2 :(得分:0)

你不需要第三个for循环。只需将第三个循环的数据存储在一个数组中,然后在第二个for循环后直接打印

答案 3 :(得分: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。