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ığı:
my_array_function
yerel bir dizi oluşturur.- Boşlukları yeni satırlarla değiştirmek için
echo
,tr
ve elemanları ayırıcıyla birleştirmek içinpaste
kullanır. - Komut yerine koyma, çıktıyı
returned_string
‘de yakalar. - 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:
my_array_function
geçerli IFS’yi kaydeder.- IFS’yi yeni satır karakterine ayarlar.
- Her dizi elemanını yeni bir satıra yazdırır.
- IFS’yi eski haline getirir.
- Ç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.