Veja o que acontece com o array ao inicializá-lo:
$ i=0; for k in a b c d; do A[$k]=$((i++)); done; declare -p A
declare -a A=([0]="3")
Apenas um elemento está presente e tem o índice zero.
Por padrão, os arrays são indexados por números , e os valores numéricos dos índices que você usou eram todos zero. Na verdade, em um contexto aritmético, como o índice de uma matriz regular, uma string é tomada como o nome de uma variável e o valor dessa variável é usado. Então, se definirmos a
, b
... para números, então obteremos algo diferente:
$ a=123; b=456; c=789; d=999; i=0;
$ for k in a b c d; do A[$k]=$((i++)); done;
$ declare -p A
declare -a A=([123]="0" [456]="1" [789]="2" [999]="3")
Para realmente usar as próprias strings como índices, declare a matriz como uma matriz associativa primeiro com declare -A arrayname
ou typeset -A arrayname
:
$ unset A; declare -A A; i=0;
$ for k in a b c d; do A[$k]=$((i++)); done; declare -p A
declare -A A=([a]="0" [b]="1" [c]="2" [d]="3" )