Bash işlevinde dönüş değeri
Bir bash betiği ile çalışıyorum ve bir dönüş değeri yazdırmak için bir işlev çalıştırmak istiyorum:
function fun1(){
return 34
}
function fun2(){
local res=$(fun1)
echo $res
}
fun2`yi çalıştırdığımda, "34" yazdırmıyor. Bu durum neden kaynaklanıyor?
265
3
Her ne kadar bash bir
return
deyimine sahip olsa da, bununla belirtebileceğiniz tek şey fonksiyonun kendiexit
durumudur (0
ile255
arasında bir değer, 0 "success" anlamına gelir). Yanireturn
istediğiniz şey değildir.Return
deyiminizi bir
echodeyimine dönüştürmek isteyebilirsiniz - bu şekilde fonksiyon çıktınız
$()` parantezleri kullanılarak yakalanabilir, ki bu tam olarak istediğiniz şey gibi görünüyor.İşte bir örnek:
Dönüş değerini almanın başka bir yolu da (sadece 0-255 arası bir tamsayı döndürmek istiyorsanız)
$?
şeklindedir.Ayrıca,
fun1 || fun2
gibi boolean mantığını kullanmak için dönüş değerini kullanabileceğinizi unutmayın,fun1
yalnızca0
değeri döndürürsefun2
yi çalıştıracaktır. Varsayılan dönüş değeri, fonksiyon içinde çalıştırılan son deyimin çıkış değeridir.$(...)
, içinde bulunan komut tarafından stdout'a gönderilen metni yakalar.
returnstdout'a çıktı vermez. $?
son komutun sonuç kodunu içerir.return
deyimi fonksiyonun çıkış kodunu belirler, tıpkıexit
deyiminin tüm kod için yaptığı gibi.Son komutun çıkış kodu her zaman
$?
değişkeninde mevcuttur.