Qual é a diferença entre @ e * ao fazer referência a valores de matriz bash?

10

Este guia do Bash diz:

If the index number is @ or *, all members of an array are referenced.

Quando faço isso:

LIST=(1 2 3)
for i in "${LIST[@]}"; do
  echo "example.$i "
done

Dá: example.1 example.2 example.3 (resultado desejado).

Mas quando uso ${LIST[*]} , recebo example.1 2 3 .

Por quê?

Editar: ao usar o printf, @ e * realmente fornecem os mesmos resultados.

    
por arjan 07.06.2014 / 16:16

1 resposta

11

A diferença é sutil; "$ *" cria um argumento, enquanto "$ @" se expande em argumentos separados, então:

LIST=(1 2 3)
for i in "${LIST[@]}"; do
 echo "example.$i"
done

lidará com a lista (imprima-a) como múltiplas variáveis

mas

LIST=(1 2 3)
for i in "${LIST[*]}"; do
 echo "example.$i"
done

lidará com a lista como uma variável.

    
por 07.06.2014 / 16:27

Tags