Puede hacerlo utilizando la Lista de claves de matriz . Desde la bash
pá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 0
si 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.