Este guia do Bash diz:
Se o número do índice for @ ou *, todos os membros de uma matriz serão referenciados.
Quando eu 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 eu uso ${LIST[*]}
, eu entendo example.1 2 3
.
Por quê?
Editar: ao usar printf, @ e * realmente dão os mesmos resultados.
echo $SHELL
e cole o resultado na sua pergunta.echo
, não comprintf
, acabei de perceber.$*
e$@
. Embora a resposta seja semelhante e uma pergunta possa ser considerada um subconjunto da outra, são perguntas diferentes.Respostas:
A diferença é sutil; "$ *" cria um argumento, enquanto "$ @" se expande em argumentos separados, portanto:
irá lidar com a lista (imprimi-la) como múltiplas variáveis
mas
lidará com a lista como uma variável.
fonte
echo
eprintf
vem? Comoprintf
no loop for, a referência da lista * é tratada como várias variáveis.