Вы можете сделать это, используя Список ключей массива . Из справочной страницы bash
:
$ {! 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