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 3lugar.
¿Por qué?
Editar: cuando se utiliza printf, @ y * realmente dan los mismos resultados.

echo $SHELLy 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
echoyprintf? Porque conprintfen el bucle for, la referencia de lista * se trata como variables múltiples.