Bash Dizileri Rehberi
Yayınlanan: 2022-12-30Bash dizileriyle ilgili bu kılavuzda, Bash'te dizine alınmış ve ilişkisel dizileri nasıl bildireceğinizi ve bunlarla nasıl çalışacağınızı öğreneceksiniz.
Bash'te, bir öğe koleksiyonunu depolamak için diziler oluşturabilirsiniz. Bash dizileri tek boyutlu koleksiyonlardır. C ve C++ gibi programlama dillerinde diziler, aynı veri türündeki öğelerin koleksiyonlarıdır. Ancak Bash'te, kullanım durumuna bağlı olarak tamsayıları ve dizeleri aynı dizide saklayabilirsiniz.
Bu öğreticide, bir Bash dizisini nasıl bildireceğinizi ve öğelerine nasıl erişeceğinizi öğreneceksiniz. Daha sonra bir dizinin elemanları arasında nasıl dolaşılacağını ve bir diziye elemanların nasıl ekleneceğini öğreneceksiniz. Son olarak, Bash'teki ilişkisel dizileri öğreneceksiniz.
Hadi başlayalım!
Birlikte kodlama ile ilgileniyor musunuz? İşte ön koşullar:
- Bir Mac veya Linux makinesindeyseniz, terminalinizi açabilir ve birlikte kodlayabilirsiniz.
- Bir Windows makinesi kullanıyorsanız, lütfen Git Bash'i veya Linux için Windows Alt Sistemini (WSL2) kurun.
Bir Bash Dizisi Nasıl Bildirilir
Bu bölümde, bir Bash dizisi bildirmek için sözdizimini ve kod örneklerini öğreneceksiniz.
Bash Dizi Bildiriminin Sözdizimi
Aşağıdaki sözdizimini kullanarak Bash'te bir dizi bildirebilirsiniz:
$ arrayName=(elt1 elt2 ... eltN) # arrayName is the name of the array # elt1 through eltN are the N elements in the array
Yukarıdaki sözdiziminde, arrayName
N
öğeyi içeren dizinin adını gösterir elt1...eltN
.
Bir dizinin elemanları açılış ve kapanış parantezleri ()
arasına alınır. Ayrıca, dizinin öğelerinin bir boşlukla ayrıldığına dikkat edin. Herhangi bir Bash değişkeninde olduğu gibi, =
atama işlecinden önce veya sonra boşluk olmamalıdır .
Diğer birçok programlama dilinde, bir dizinin veya benzer koleksiyonların öğelerini virgülle ayırırsınız. Ancak Bash'te boşluk ayırıcıdır.
Bash'te, elemanların indekslerine göre tanımlandığı bu tür dizilere indekslenmiş dizi denir.
Bash'te Dizinlenmiş Diziler Bildirme
Bir sayı dizisi olan prices
oluşturalım.
$ prices=(24 27 18 30 15)
Sözdiziminde belirtildiği gibi,
prices
dizisindeki sayılar, = atama operatöründen önce ve sonra boşluk bırakılmadan parantez içine alınmış bir boşlukla ayrılır.
Bash'te, bir değişkenin değerini yazdırmak için echo
komutunu kullanabilirsiniz. $variableName
kullanılması, variableName
değerini yazdırır. Ancak, dizinin adını kullanmanın yalnızca ilk öğeyi yazdırdığını görebilirsiniz.
$ echo $prices 24
Bash dizileri sıfır indekslemeyi takip eder. Yani ilk eleman 0 indeksinde, ikinci eleman 1 indeksinde vb. Negatif indekslemeyi de kullanabilirsiniz; son dizi öğesinin dizini -1'dir.
Öğeye belirli bir dizinde erişmeye ve onu yazdırmaya çalışırsanız ne olur? Dizin 1'deki öğeyi yazdırmayı deneyelim.
$ echo $prices[1] 24[1]
Çıktı neden 24[1]? Bunun nedeni, Bash'in $prices
değerini dizideki ilk öğe olan 24 ile değiştirmesi ve [1]'in bu şekilde yazdırılmasıdır.
Öğeyi belirli bir dizinde yazdırmak için, ${prices[index]}
formunun parametre genişletmesini kullanabilirsiniz.
$ echo ${prices[1]} # 27 $ echo ${prices[2]} # 18
Dizideki tüm öğeleri yazdırmak için belirli bir dizin yerine @
belirtebilirsiniz.
$ echo ${prices[@]} 24 27 18 30 15
Ardından, bir dizi dize oluşturalım. Aşağıdaki komutu çalıştırmak, dizine alınmış bir dizi oluşturur:
$ declare -a fruits
-a
seçeneği dizine alınmış bir dizi oluşturur. Artık diziyi, her seferinde bir öğe olacak şekilde, öğeyi aşağıda gösterildiği gibi belirli bir dizinde bildirerek doldurabilirsiniz:
$ fruits[0]="cherry" $ fruits[1]="berry" $ fruits[2]="apple" $ fruits[3]="pear" $ fruits[4]="melon" $ fruits[5]="orange"
Şimdi, dizinin tüm öğelerini yazdırmak için ${fruits[@]}
kullanabilirsiniz.
$ echo ${fruits[@]} cherry berry apple pear melon orange
Bir Bash Dizisinin Öğelerine Erişin
Dizinin öğelerine aşağıdaki şekillerde erişebilirsiniz:
- Dizide dolaşın ve öğeye doğrudan erişin
- Dizin kümesinde döngü yapın ve belirli bir dizindeki öğelere erişin
Dizi İçinde Döngü Yapın ve Öğelere Erişin
Python'da kod yazdıysanız, aşağıdaki sözdizimini kullanarak for döngüsünü kullanmış olacaksınız:
for elt in some_list: print(elt)
Şimdi yukarıdaki for döngüsünün Bash eşdeğerini yazalım.
{prices[@]}
fiyatının, prices
dizisindeki tüm öğeleri kapsayacak şekilde genişlediğini biliyoruz. Ve ${prices[@]}
bize tüm öğelerin değerlerini verir.
Bash for döngüsü, Python'un for döngüsü sözdizimine benzer, ancak döngü gövdesindeki ifadeler, gösterildiği gibi, do
ve done
içine alınmalıdır:
$ for price in ${prices[@]} > do > echo $price > done
echo komutunu kullandığımız ve price
değişkeninin değerini yazdırdığımız için aşağıdaki çıktıyı alırız:
# output 24 27 18 30 15
Dizi Dizinini Kullanarak Öğelere Erişin
Diziler arasında döngü kurmanın başka bir yolu, öğelerin dizinini kullanmaktır. Bu, Python'daki for döngüsü yapısının range()
işlevini kullanmasına benzer:
for i in range(len(some_list)): print(i)
Döndürülecek dizinlerin bir listesini almak için, parametre genişletmede dizi adından önce bir ünlem işareti ( !
) koyabilirsiniz. Bu, gösterildiği gibi size dizi için tüm geçerli dizinlerin listesini verecektir:
$ echo ${!prices[@]} 0 1 2 3 4
prices
dizisi 5 öğe içerir, bu nedenle dizin 0'dan başlar ve 4'e kadar çıkar.
Ardından, dizinler listesinde dolaşabilir ve her dizindeki öğeye erişebiliriz. i
dizini için ${prices[i]}
, i
dizinindeki öğedir.
$ for i in ${!prices[@]} > do > echo ${prices[i]} > done
Yukarıdaki döngü, dizideki tüm öğeleri yazdırır.
# output 24 27 18 30 15
Burada, her öğeye eriştikten sonra, değerini yazdırmak için basit bir işlem gerçekleştiriyoruz. Genel olarak, öğeler üzerinde herhangi bir geçerli işleme sahip olabiliriz.
Öğeleri Bash Dizisine Ekleme
prices
dizisinde beş öğemiz var (0,1,2,3 ve 4 dizinlerinde). 5. indeksteki dizinin sonuna bir eleman eklemek isterseniz, bunu aşağıdaki gibi yapabilirsiniz:
$ prices[5]=21
Fiyatlar dizisinin sonuna 21 eklendiğini görüyoruz.
$ echo ${prices[@]} 24 27 18 30 15 21
Bununla birlikte, son eklenen öğenin dizinini veya şu anda dizide bulunan öğelerin sayısını hatırlamadan dizinin sonuna eklemek daha uygundur.
Gösterildiği gibi bir diziye bir veya daha fazla öğe eklemek için arrayName+=(elements(s))
öğesini kullanabilirsiniz:
$ prices+=(10)
Şimdi prices
dizisini yazdırırsak dizinin sonuna 10 eklendiğini görürüz.
$ echo ${prices[@]} 24 27 18 30 15 21 10
Şimdi, Bash'te ilişkisel dizileri nasıl bildireceğimizi öğrenelim.
Bash'te İlişkisel Diziler
Anahtar-değer çiftleri açısından bir ilişki tanımlamak istiyorsanız, bir ilişkisel dizi kullanabilirsiniz. Aşağıdaki genel sözdizimini kullanarak bir ilişkisel dizi bildirebilirsiniz. -a
yerine -A
seçeneğini kullandığımıza dikkat edin.
$ declare -A fruits_prices
Anahtarı ve karşılık gelen değeri belirterek ilişkisel diziye öğeler ekleyebilirsiniz. Burada anahtar olarak meyvelerin isimlerini, değer olarak ise fiyatlar dizisindeki sayıları ekledik.
$ fruits_prices[cherry]=24 $ fruits_prices[berry]=27 $ fruits_prices[apple]=18 $ fruits_prices[pear]=30 $ fruits_prices[melon]=15 $ fruits_prices[orange]=21
Öyleyse, bir ilişkisel dizideki öğelere nasıl erişiriz?
Bir Python sözlüğünde karşılık gelen anahtarı kullanarak değeri aradığınız gibi, anahtarları kullanarak bir ilişkisel dizideki değerlere erişebilirsiniz.
$ echo ${fruits_prices[berry]} # 27
${fruits_prices[@]}
'in değerlere ve ${!fruits_prices[@]}
'in anahtarlara doğru genişlediğini görüyoruz.
$ echo ${fruits_prices[@]} # Output: 18 27 21 24 30 15 $ echo ${!fruits_prices[@]} # Output: apple berry orange cherry pear melon
Not : Öğelerin sırası, onları eklediğimiz sırayla aynı değil. Bunun nedeni, indekslenmiş dizilerin aksine, ilişkisel dizilerin sıralı koleksiyonlar olmamasıdır. Bunun yerine, anahtarlar ve değerler arasındaki ilişki üzerinde çalışırlar. Bu nedenle, dizinler dizine alınmış diziler için ne ise, ilişkisel diziler için de anahtarlar odur.
Ayrıca, ilişkisel dizide dolaşabilir ve gösterildiği gibi tuşlara erişebilirsiniz:
$ for key in ${!fruits_prices[@]} > do > echo $key > done
# Output apple berry orange cherry pear melon
Aşağıdaki döngü, değerlere nasıl erişebileceğinizi gösterir.
$ for value in ${fruits_prices[@]} > do > echo $value > done
# Output 18 27 21 24 30 15
arrayName[key]=value
kullanılması tavsiye edilse de, bunu aşağıdaki gibi bir dizi olarak da bildirebilirsiniz:
declare -A arrayName arrayName=(key1 value1 key2 value2 ... keyN valueN)
Bu şekilde, Bash birinci öğeyi birinci anahtar, ikinci öğeyi birinci değer olarak algılar ve bu böyle devam eder.
Özetliyor
Umarım artık Bash dizilerini nasıl oluşturacağınızı ve bunlarla çalışacağınızı anlamışsınızdır. İşte öğrendiklerinizin hızlı bir gözden geçirmesi.
-
arrayName=(elt1 elt2 elt3 ... eltN)
sözdizimini kullanarak Bash'te dizine alınmış bir dizi bildirebilir veyadeclare -a arrayName
diziAdı bildirimini çalıştırıp diziye öğeler ekleyebilirsiniz. - Öğelere erişmek için
${arrayName[@]}
kullanarak geçiş yapabilirsiniz. Alternatif olarak,${!arrayName[@]}
parametre genişletmesini kullanarak tüm geçerli dizinlerin listesini alabilirsiniz. - Son olarak, anahtar-değer çiftlerini Bash'te depolamak için bir ilişkisel dizi bildirmeyi de öğrendiniz.
Ardından, Bash'te döngüler için öğreticiye göz atın.