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?
Her ne kadar bash bir return
deyimine sahip olsa da, bununla belirtebileceğiniz tek şey fonksiyonun kendi exit
durumudur (0
ile 255
arasında bir değer, 0 "success" anlamına gelir). Yani return
istediğiniz şey değildir.
Returndeyiminizi 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:
function fun1(){
echo 34
}
function fun2(){
local res=$(fun1)
echo $res
}
Dönüş değerini almanın başka bir yolu da (sadece 0-255 arası bir tamsayı döndürmek istiyorsanız) $?
şeklindedir.
function fun1(){
return 34
}
function fun2(){
fun1
local res=$?
echo $res
}
Ayrıca, fun1 || fun2
gibi boolean mantığını kullanmak için dönüş değerini kullanabileceğinizi unutmayın, fun1
yalnızca 0
değeri döndürürse fun2
yi çalıştıracaktır. Varsayılan dönüş değeri, fonksiyon içinde çalıştırılan son deyimin çıkış değeridir.
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.
function fun1(){
return 34
}
function fun2(){
local res=$(fun1)
echo $? # <-- Always echos 0 since the 'local' command passes.
res=$(fun1)
echo $? #<-- Outputs 34
}