Ten przewodnik Bash mówi:
Jeśli numerem indeksu jest @ lub *, odwołuje się do wszystkich elementów tablicy.
Kiedy to zrobię:
LIST=(1 2 3)
for i in "${LIST[@]}"; do
echo "example.$i "
done
Daje: example.1 example.2 example.3
(pożądany wynik).
Ale kiedy używam ${LIST[*]}
, dostaję example.1 2 3
zamiast tego.
Dlaczego?
Edycja: podczas korzystania z printf, @ i * faktycznie dają te same wyniki.
echo $SHELL
i wklej wynik do swojego pytania.echo
, a nie zprintf
, właśnie zauważyłem.$*
i$@
. Chociaż odpowiedź byłaby podobna, a jedno pytanie można uznać za podzbiór drugiego, są to różne pytania.Odpowiedzi:
Różnica jest subtelna; „$ *” tworzy jeden argument, podczas gdy „$ @” rozwinie się w osobne argumenty, więc:
zajmie się listą (wydrukuje ją) jako wiele zmiennych
ale
będzie traktować listę jako jedną zmienną.
źródło
echo
iprintf
pochodzi? Ponieważprintf
w pętli for odwołanie do listy * jest traktowane jako wiele zmiennych.