Це можна зробити за допомогою списку клавіш масиву . На bash
чоловіковій сторінці:
${!name[@]}
${!name[*]}
Список ключів масиву . Якщо name є змінною масиву, розширюється до списку індексів (ключів) масиву, присвоєних імені. Якщо ім'я не є масивом, він розширюється на те, 0
якщо ім'я встановлено, а інше недійсне. Коли @
використовується і розширення з’являється в подвійних лапках, кожна клавіша розширюється на окреме слово.
Для вашого прикладу:
#!/bin/bash
AR=('foo' 'bar' 'baz' 'bat')
for i in "${!AR[@]}"; do
printf '${AR[%s]}=%s\n' "$i" "${AR[i]}"
done
Це призводить до:
${AR[0]}=foo
${AR[1]}=bar
${AR[2]}=baz
${AR[3]}=bat
Зауважте, що це також працює для непослідовних індексів:
#!/bin/bash
AR=([3]='foo' [5]='bar' [25]='baz' [7]='bat')
for i in "${!AR[@]}"; do
printf '${AR[%s]}=%s\n' "$i" "${AR[i]}"
done
Це призводить до:
${AR[3]}=foo
${AR[5]}=bar
${AR[7]}=bat
${AR[25]}=baz
"${array[*]}"
замість цього"${array[@]}"
. Використання*
замість@
більш-менш трактує його як рядок замість масиву.