2017-09-25 31 views
0

我想知道在bash中以2或更多的步骤迭代数组的最佳方式是什么?

例如,以下两种方法可行,但是最简单的方法是什么?Bash - 如何在2的步骤迭代数组?

test_loops.sh

#!/usr/bin/env bash 

function strategyOne() 
{ 
    X=0 
    for I in "[email protected]" 
    do 
    X=$((X%2)) 
    if [ $X -eq 1 ] 
    then 
     B="$I" 
     echo "Pair: $A,$B" 
    else 
     A="$I" 
    fi 

    X=$((X+1)) 
    done 
} 

function strategyTwo() 
{ 
ARG_COUNT=$# 
COUNTER=0 
while [ $COUNTER -lt $ARG_COUNT ]; do 
    let COUNTER=COUNTER+1 
    A="${!COUNTER}" 
    let COUNTER=COUNTER+1 
    B="${!COUNTER}" 

    if [ $COUNTER -le $ARG_COUNT ] 
    then 
     echo "Pair: $A,$B" 
    fi 
done 

} 

echo 
echo "Strategy 1" 
strategyOne $* 

echo 
echo "Strategy 2" 
strategyTwo $* 

生成输出像这样:

$ ./test.sh a b c d e 

Strategy 1 
Pair: a,b 
Pair: c,d 

Strategy 2 
Pair: a,b 
Pair: c,d 

回答

1

这里有一个简单的方法击。

#!/bin/bash 

data=("Banana" "Apple" "Onion" "Peach") 

for ((i=0;i< ${#data[@]} ;i+=2)); 
do 
     echo ${data[i]} 
done 

问候!

2

可以使用数组索引使用迭代:

arr=(1 2 3 4 5 6 7 8 9) 

for ((i=0; i<${#arr[@]}; i+=2)); do echo "${arr[i]}"; done 

1 
3 
5 
7 
9 
1

另一种方式来做到这一点:

data=("Banana" "Apple" "Onion" "Peach") 
for i in $(seq 0 2 ${#data[@]}) 
do 
    echo ${data[i]} 
done