Puede hacerlo utilizando la Lista de claves de matriz . Desde la bashpágina del manual:
${!name[@]}
${!name[*]}
Lista de claves de matriz . Si nombre es una variable de matriz, se expande a la lista de índices de matriz (claves) asignados en el nombre. Si el nombre no es una matriz, se expande a 0si el nombre está establecido y nulo de lo contrario. Cuando @se usa y la expansión aparece entre comillas dobles, cada tecla se expande a una palabra separada.
Por su ejemplo:
#!/bin/bash
AR=('foo' 'bar' 'baz' 'bat')
for i in "${!AR[@]}"; do
printf '${AR[%s]}=%s\n' "$i" "${AR[i]}"
done
Esto resulta en:
${AR[0]}=foo
${AR[1]}=bar
${AR[2]}=baz
${AR[3]}=bat
Tenga en cuenta que esto también funciona para índices no sucesivos:
#!/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
Esto resulta en:
${AR[3]}=foo
${AR[5]}=bar
${AR[7]}=bat
${AR[25]}=baz
"${array[*]}"lugar de"${array[@]}". Usar en*lugar de@más o menos lo trata como una cadena en lugar de una matriz.