Bash dizi değerlerine başvururken @ ve * arasındaki fark nedir?


15

Bu Bash kılavuzu şunları söylüyor:

Dizin numarası @ veya * ise, bir dizinin tüm üyelerine başvurulur.

Bunu yaptığımda:

LIST=(1 2 3)
for i in "${LIST[@]}"; do
  echo "example.$i "
done

Verir: example.1 example.2 example.3(istenen sonuç).

Ama kullandığımda bunun yerine ${LIST[*]}alıyorum example.1 2 3.

Neden?

Düzenleme: printf kullanırken, @ ve * aslında aynı sonuçları verir.


Benim için çalışıyor gibi görünüyor. Hem @ hem de * denedim ve aynı sonucu iki kere de üretiyor gibi görünüyor. Hangi kabuğu kullanıyorsunuz? echo $SHELLÇıkışı çalıştırın ve sorunuza yapıştırın.
Ramesh

Benim örnek bu aslında sadece olur, yanlış echodeğil ile, printfsadece fark.
arjan


@goldilocks Diğer soru $*ve hakkındadır $@. Gerçi, cevap benzer olacak ve bir soru olabilir diğer bir alt kümesi olarak kabul edilmesi, farklı sorulardır.
Stéphane Chazelas

Yanıtlar:


17

Fark incedir; "$ *" bir bağımsız değişken yaratırken, "$ @" ayrı bağımsız değişkenlere genişler, bu nedenle:

LIST=(1 2 3)
for i in "${LIST[@]}"; do
 echo "example.$i"
done

listeyle birden fazla değişken olarak ilgilenir (yazdırır)

fakat

LIST=(1 2 3)
for i in "${LIST[*]}"; do
 echo "example.$i"
done

liste tek değişken olarak ele alınacaktır.


Arasındaki fark nerede biliyor musunuz echove printfgelir? Çünkü printffor döngüsünde * liste başvurusu birden çok değişken olarak ele alınır.
arjan

Bir şeyin birden çok değişkene karşı tek olarak ele alınması ne anlama gelir? Farkı göstermek için pratik bir örnek sunup sunamayacağınızı merak ediyorum.
fraxture
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.