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.