Bash değişken atamasında tek parantez


11

Ben bash tek parantez merak ediyordum. Alt kabuklarda komut yürütmek için kullanıldığını ve diziler oluşturmak için kullanıldıklarını biliyorum, ama başka bir şey için mi kullanılıyorlar?

Dikkatimi çeken bir şey, değişken atamada kullandığınızda,

var=(hello)
echo $var    # hello

bash bir hata ya da herhangi bir şey üretmez ve çıktı sanki gibi

var=hello

Bu iki değişken tanımı aynı mı yoksa fark var mı?

Yanıtlar:


14

Sizin durumunuzda parantez ()dizi tanımı olarak kullanılır, örneğin

a=(one two three)   # array definition
echo "${a}"         # print first element of array a
echo "${a[0]}"      # print first element of array a
echo "${a[1]}"      # print *second* element of array a
echo "${#a[@]}"     # print number of elements in array a

Diziye tek değişken koyarsanız, tek elemanlı bir diziniz olur.


Parantezin başka herhangi bir şey için de kullanılıp kullanılmadığını diğer sorunuza cevaplamak için: bashdiğer karakterlerle birlikte bunlar için kullanılabilecek birçok durum vardır :

  • komut ikamesi: $()
  • süreç ikamesi: <()ve>()
  • altkabuk: (command)
  • aritmetik değerlendirme: (())
  • fonksiyon tanımı: fun () { echo x; }
  • glob desen listesi: ?(), *(), +(), @(), !()( yalnızca extglobisimli etkinleştirmek )

1
Doğru, aslında bunu düşünmedim. Ama var=(1 2 3); echo $varaynı şey var=(1 2 3); echo ${var[0]}?
Mattias

Evet, sonuç bashaynı.
jimmij

İhtiyacımız ""var echo "${a}"mı?
nn0p

@ nn0p Evet, bölme ve glob işlemi yapmak istemiyorsak yapıyoruz a. Örneğin a=*, düşünün echo $ave sonra deneyin echo "$a".
jimmij
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.