c=('a' 'c')
n=(3 4 )
for i in $(seq 0 $((${#c[*]}-1)))
do
echo ${c[i]} ${n[i]}
done
Может быть, иногда будет удобнее.
Для объяснения части ugly
, как отмечено в комментариях:
seq 0 2 производит последовательность чисел 0 1 2. $ (cmd) является подстановкой команды, поэтому для этого примера вывод seq 0 2
, который является числовой последовательностью. Но какова верхняя граница, $((${#c[*]}-1))
?
$ ((что-то)) является арифметическим расширением, поэтому $ ((3 + 4)) равно 7 и т. Д. Наше выражение равно ${#c[*]}-1
, поэтому что-то - 1. Довольно просто, если мы знаем, что такое ${#c[*]}
.
c - это массив, c [*] - это просто весь массив, $ {# c [*]} - это размер массива, равный 2 в нашем случае. Теперь мы откатим все назад: for i in $(seq 0 $((${#c[*]}-1)))
равно for i in $(seq 0 $((2-1)))
равно for i in $(seq 0 1)
равно for i in 0 1
. Потому что последний элемент в массиве имеет индекс, который является длиной массива - 1.