Bash Scripting

Bash Fonksiyonlarından Verimli Bir Şekilde Dizi Dondürme

Spread the love

Bash, fonksiyonlardan dizi döndürmeyi doğrudan desteklemez. Bununla birlikte, zekice teknikler kullanarak bunu başarabiliriz. Bu makale, iki etkili yöntemi ele almaktadır: komut yerine koyma ve İç Alan Ayırıcıyı (IFS) manipüle etme.

İçerik Tablosu

Komut Yerine Koyma

Komut yerine koyma, bir komutun çıktısını yakalar ve bir değişkene atar. Bu, ilk yöntemimizin temelini oluşturur. Anahtar nokta, fonksiyonun çıktısını diziye geri kolayca ayrıştırılabilir şekilde biçimlendirmektir.

Komut Yerine Koyma ile Dizi Döndürme

Bu yöntem, dizi elemanlarını bir ayırıcı kullanarak birleştirip ardından bu dizeyi tekrar bir diziye ayırmayı içerir. Bir örneğe bakalım:


my_array_function() {
  local array=("elma" "muz" "kiraz")
  local delimiter="|"
  echo "${array[*]}" | tr ' ' 'n' | paste -sd"$delimiter" -
}

returned_string=$(my_array_function)
returned_array=(${returned_string//|$delimiter/ })

echo "Döndürülen dizi: ${returned_array[@]}"

İşte nasıl çalıştığı:

  1. my_array_function yerel bir dizi oluşturur.
  2. Boşlukları yeni satırlarla değiştirmek için echo, tr ve elemanları ayırıcıyla birleştirmek için paste kullanır.
  3. Komut yerine koyma, çıktıyı returned_string‘de yakalar.
  4. Parametre genişletme, returned_array dizisini oluşturmak için ayırıcıyı boşluklarla değiştirir.

Bu yaklaşım basit ve etkilidir, ancak ayırıcı dizi elemanlarında bulunmamalıdır. Eğer bulunuyorsa, daha az yaygın bir karakter veya daha sağlam bir ayırıcı işleme yöntemi kullanmayı düşünün.

IFS ile Dizi Döndürme

İç Alan Ayırıcı (IFS), Bash’in dizeleri kelimelere nasıl ayırdığını kontrol eder. Fonksiyon içinde IFS’yi ayarlayarak ve dizi elemanlarını yazdırarak dizileri döndürmek için bundan yararlanabiliriz. Çağıran komut dosyası daha sonra çıktıyı ayrıştırmak için değiştirilmiş IFS’yi kullanır.


my_array_function() {
  local array=("elma" "muz" "kiraz")
  local old_ifs="$IFS"
  IFS=$'n'
  printf "%sn" "${array[@]}"
  IFS="$old_ifs"
}

returned_array=($(my_array_function))

echo "Döndürülen dizi: ${returned_array[@]}"

Açıklama:

  1. my_array_function geçerli IFS’yi kaydeder.
  2. IFS’yi yeni satır karakterine ayarlar.
  3. Her dizi elemanını yeni bir satıra yazdırır.
  4. IFS’yi eski haline getirir.
  5. Çağıran komut dosyası, diziyi oluşturmak için yeni satırı ayırıcı olarak kullanır.

Dizi elemanlarınız yeni satır içermiyorsa bu yöntem daha temizdir. Yeni satır içeren elemanlar için, daha az olası bir IFS karakteri seçmeniz gerekir.

En İyi Yöntemi Seçme

Her iki yöntem de geçerli çözümler sunar. En iyi seçim, belirli ihtiyaçlarınıza ve dizi içeriğinize bağlıdır. Komut yerine koyma yaklaşımı, ayırıcı seçimi konusunda daha fazla esneklik sunarken, verileriniz izin veriyorsa IFS kullanmak daha temiz olabilir. Her zaman temiz, sağlam ve iyi yorumlanmış koda öncelik verin.

Bir yanıt yazın

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir