Esta guía de Bash dice:
Si el número de índice es @ o *, se hace referencia a todos los miembros de una matriz.
Cuando hago esto:
LIST=(1 2 3)
for i in "${LIST[@]}"; do
echo "example.$i "
done
Da: example.1 example.2 example.3
(resultado deseado).
Pero cuando uso ${LIST[*]}
, obtengo en su example.1 2 3
lugar.
¿Por qué?
Editar: cuando se utiliza printf, @ y * realmente dan los mismos resultados.
echo $SHELL
y pegue el resultado a su pregunta.echo
, no conprintf
, acabo de notar.$*
y$@
. Sin embargo, la respuesta sería similar y una pregunta podría considerarse un subconjunto de la otra, son preguntas diferentes.Respuestas:
La diferencia es sutil; "$ *" crea un argumento, mientras que "$ @" se expandirá en argumentos separados, entonces:
tratará la lista (imprímala) como múltiples variables
pero
tratará con la lista como una variable.
fuente
echo
yprintf
? Porque conprintf
en el bucle for, la referencia de lista * se trata como variables múltiples.