Você pode fazer isso usando a Lista de chaves da matriz . Na bash
página do manual:
${!name[@]}
${!name[*]}
Lista de chaves de matriz . Se nome é uma variável de matriz, expande para a lista de índices de matriz (chaves) atribuídos no nome. Se nome não for uma matriz, expande para 0
se o nome estiver definido e nulo caso contrário. Quando @
é usada e a expansão aparece entre aspas duplas, cada tecla se expande para uma palavra separada.
Para o seu exemplo:
#!/bin/bash
AR=('foo' 'bar' 'baz' 'bat')
for i in "${!AR[@]}"; do
printf '${AR[%s]}=%s\n' "$i" "${AR[i]}"
done
Isto resulta em:
${AR[0]}=foo
${AR[1]}=bar
${AR[2]}=baz
${AR[3]}=bat
Observe que isso também funciona para índices não sucessivos:
#!/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
Isto resulta em:
${AR[3]}=foo
${AR[5]}=bar
${AR[7]}=bat
${AR[25]}=baz
"${array[*]}"
vez de"${array[@]}"
. Usar em*
vez de@
mais ou menos trata-o como uma sequência em vez de uma matriz.