Por que esse código relacionado à matriz imprime o índice no final de cada linha?

2

Estou com problemas para trabalhar com um array no BASH. Eu simplifiquei o problema até o seguinte código:

#! /bin/bash

A1[0]="user1 user2 user3" 
A1[1]="user4 user5 user6"

for each in ${!A1[*]} 
do
        echo -n "$each "
        echo $A1[$each] 
done

A saída é a seguinte:

0 user1 user2 user3[0]
1 user1 user2 user3[1]

Não consigo entender porque cada linha tem o [X] nele (presumivelmente uma indicação do elemento da matriz). Como posso recuperar o índice e a linha de dados do array sem o índice anexado a ele?

    
por davidgo 08.06.2015 / 03:28

1 resposta

3

Em bash *, você precisa usar chaves como esta:

echo ${A1[$each]}

para tornar [$each] um índice na matriz A1 .

Por homem bash (1):

Any element of an array may be referenced using ${name[subscript]}. The braces are required to avoid conflicts with pathname expansion.

Mais abaixo, diz:

Referencing an array variable without a subscript is equivalent to referencing the array with a subscript of 0.

É por isso que o seu código original não funcionou, pois o shell só vê o subscrito se você usar chaves.

Então

echo $A1[$each]

é equivalente a

echo ${A1[0]}[$each]

onde os colchetes não têm nenhum significado especial, então são impressos como estão.

  • E em ksh e em zsh se a opção KSH_ARRAYS estiver definida.
por 08.06.2015 / 04:08

Tags