更改启动器循环索引

时间:2014-04-03 15:45:48

标签: shell for-loop

我想在shell脚本中比较两个没有重组的列表:

A=(a b c d e)
B=(b c d e f)

然后打印一个组合

ab
ac
ad
ae
af

bc
bd
be
bf

...


de
df

ef 

我试过'因为'环

------------------------ CODE ---------------------- ------------------

arr_a=(a b c d e f)


for i in 0 1 2 3 4
do


jdx=$(( $i + 1 ))


        for j in {$jdx..5}        
        do

        echo ${arr_a[$i]}'_'${arr_a[$j]}

        done

done

-------------------- END CODE ------------------------- -----------

但问题是$jdx

解决此问题的任何提示?

2 个答案:

答案 0 :(得分:0)

您可以使用brace expansion执行此操作:

$ A=(a b c d e)
$ B=(b c d e f)
$ eval echo $(echo {${A[@]}}{${B[@]}} | tr ' ' ',')
ab ac ad ae af bb bc bd be bf cb cc cd ce cf db dc dd de df eb ec ed ee ef

这是首先以{a,b,c,d,e}{b,c,d,e,f}的形式输出数组,然后括号扩展处理其余的数据。

答案 1 :(得分:0)

使用C风格的循环:

for ((i=0; i < ${#A[@]}; i++)); do  
    for ((j=i; j < ${#B[@]}; j++)); do
        echo ${A[i]}${B[j]}
    done
    echo
done 
ab
ac
ad
ae
af

bc
bd
be
bf

cd
ce
cf

de
df

ef