如何在Bash中构造循环

如何在Bash中构造循环,bash,ubuntu,Bash,Ubuntu,我想编写一个脚本,循环通过一个数组,循环将在每个回合中考虑当前值和以下值,例如- VARIABLES=( 10 20 30 40 50 80 ) for i in ${VARIABLES[@]}; do ## Ideally it should stop at 2nd last value #Value1=$i #Value2=$(i+1) done 如何以正确的方式实现相同的操作?您需要循环遍历索引,而不是数组元素,因此可以对索引进行算术运算 fo

我想编写一个脚本,循环通过一个数组,循环将在每个回合中考虑当前值和以下值,例如-

VARIABLES=( 10 20 30 40 50 80 )

for i in ${VARIABLES[@]}; do   ## Ideally it should stop at 2nd last value 
        #Value1=$i 
        #Value2=$(i+1)
done 

如何以正确的方式实现相同的操作?

您需要循环遍历索引,而不是数组元素,因此可以对索引进行算术运算

for ((i=0; i < ${#VARIABLES[@]}-1; i++))
do
    value1=${VARIABLES[i]}
    value2=${VARIABLES[i+1]}
    ...
done
((i=0;i<${#变量[@]}-1;i++)的

做
value1=${VARIABLES[i]}
value2=${VARIABLES[i+1]}
...
完成

我有一些变体,首先是使用函数和
shift

values=( 10 20 30 40 50 80 )

get_paired_values () {
    while [[ $@ ]]; do
        value1=$1 value2=$2
        echo "$value1 $value2"
        shift 2
    done
}

get_paired_values "${values[@]}"
第二种方法是使用
循环索引,这更为优雅)

和第二种方法的变体,但使用slice和
read

i=0
while [[ ${values[$i]} ]]; do
    read   value1  value2 <<< ${values[@]:$i:2}
    echo "$value1 $value2"; ((i+=2))
done
i=0
而[[${values[$i]}]];做
读取值1值2
i=0
while [[ ${values[$i]} ]]; do
    read   value1  value2 <<< ${values[@]:$i:2}
    echo "$value1 $value2"; ((i+=2))
done