Как построить л oop в Bash - PullRequest
       0

Как построить л oop в Bash

0 голосов
/ 12 марта 2020

Я хочу написать скрипт, который проходит через массив, и l oop будет учитывать текущие и следующие значения в каждом раунде, например -

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 

Как добиться того же самого правильно?

Ответы [ 2 ]

1 голос
/ 12 марта 2020

У меня есть несколько вариантов, во-первых, используя функцию и 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[@]}"

И во-вторых, используя while l oop над индексами, что еще более элегантно)

i=0
while [[ ${values[$i]} ]]; do
    value1=${values[$i]}  ; ((i++)); value2=${values[$i]}
    echo "$value1 $value2"; ((i++))
done

И вариант второго метода, но с использованием среза и read

i=0
while [[ ${values[$i]} ]]; do
    read   value1  value2 <<< ${values[@]:$i:2}
    echo "$value1 $value2"; ((i+=2))
done
0 голосов
/ 12 марта 2020

Вам нужно l oop через индексы, а не элементы массива, так что вы можете сделать арифметику c с индексом.

for ((i=0; i < ${#VARIABLES[@]}-1; i++))
do
    value1=${VARIABLES[i]}
    value2=${VARIABLES[i+1]}
    ...
done
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...