Dieser Bash-Leitfaden sagt:
Wenn die Indexnummer @ oder * ist, wird auf alle Mitglieder eines Arrays verwiesen.
Wenn ich das mache:
LIST=(1 2 3)
for i in "${LIST[@]}"; do
echo "example.$i "
done
Gibt: example.1 example.2 example.3
(gewünschtes Ergebnis).
Aber wenn ich benutze ${LIST[*]}
, bekomme ich example.1 2 3
stattdessen.
Warum?
Bearbeiten: Wenn Sie printf verwenden, liefern @ und * tatsächlich die gleichen Ergebnisse.
echo $SHELL
die Ausgabe aus und fügen Sie sie in Ihre Frage ein.echo
, nicht mitprintf
, habe ich gerade gemerkt.$*
und$@
. Die Antwort wäre zwar ähnlich und eine Frage könnte als Teilmenge der anderen angesehen werden, es handelt sich jedoch um unterschiedliche Fragen.Antworten:
Der Unterschied ist subtil; "$ *" erstellt ein Argument, während "$ @" in separate Argumente umgewandelt wird.
behandelt die Liste (drucke sie aus) als mehrere Variablen
aber
behandelt die Liste als eine Variable.
quelle
echo
undprintf
kommt? Weil mitprintf
in der for-Schleife die * -Listenreferenz als mehrere Variablen behandelt wird.