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?

Çözüm

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 birechodeyimine 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 fun2yi çalıştıracaktır. Varsayılan dönüş değeri, fonksiyon içinde çalıştırılan son deyimin çıkış değeridir.

Yorumlar (12)

$(...), içinde bulunan komut tarafından stdout'a gönderilen metni yakalar.returnstdout'a çıktı vermez. $? son komutun sonuç kodunu içerir.

fun1 (){
  return 34
}

fun2 (){
  fun1
  local res=$?
  echo $res
}
Yorumlar (2)

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 $? # 
Yorumlar (0)