Ce guide Bash dit:
Si le numéro d'index est @ ou *, tous les membres d'un tableau sont référencés.
Quand je fais ça:
LIST=(1 2 3)
for i in "${LIST[@]}"; do
echo "example.$i "
done
Donne: example.1 example.2 example.3
(résultat souhaité).
Mais quand j'utilise ${LIST[*]}
, j'obtiens à la example.1 2 3
place.
Pourquoi?
Edit: lorsque vous utilisez printf, @ et * donnent en fait les mêmes résultats.
echo $SHELL
et collez la sortie dans votre question.echo
, pas avecprintf
, je viens de le remarquer.$*
et$@
. Bien que la réponse soit similaire et qu'une question puisse être considérée comme un sous-ensemble de l'autre, ce sont des questions différentes.Réponses:
La différence est subtile; "$ *" crée un argument, tandis que "$ @" se développera en arguments séparés, donc:
traitera la liste (l'imprimer) comme plusieurs variables
mais
traitera la liste comme une variable.
la source
echo
etprintf
vient? Parce queprintf
dans la boucle for, la référence de la liste * est traitée comme plusieurs variables.