запускать от имени пользователя root:sudo apt install ruby-railties
array=( 1 2 3 a b c )
for i in "${!array[@]}"; do
j=$(( ${#array[@]} - i - 1 ))
printf '%s\t%s\n' "${array[i]}" "${array[j]}"
done
Выход:
1 c
2 b
3 a
a 3
b 2
c 1
Короче говоря, ничто не мешает вам пройтись по массиву в любом порядке и в то же время вычислить новый индекс из текущего индекса и использовать его тоже.
В комментариях к вопросу есть предложение для следующего арифметического цикла:
for (( i = 0, j = ${#array[@]} - 1; i < ${#array[@]}; ++i, --j ))
do
printf '%s\t%s\n' "${array[i]}" "${array[j]}"
done
При этом используется тот факт, что оператор запятая может использоваться в частях инициализации и обновления заголовка цикла для поддержки двух отдельных переменных цикла.
В зависимости от того, чего вы хотите достичь, и в зависимости от ваших фактических значений массива, вы также можете использоватьtac
:
$ paste <( printf '%s\n' "${array[@]}" ) <( printf '%s\n' "${array[@]}" | tac )
1 c
2 b
3 a
a 3
b 2
c 1