Returverdi i en Bash-funksjon

Jeg jobber med et bash-skript, og jeg vil utføre en funksjon for å skrive ut en returverdi:

function fun1(){
  return 34
}
function fun2(){
  local res=$(fun1)
  echo $res
}

Når jeg kjører fun2, skriver den ikke ut "34". Hvorfor er dette tilfelle?

Løsning

Selv om bash har en return-setning, er det eneste du kan spesifisere med den funksjonens egen exit-status (en verdi mellom 0 og 255, 0 betyr "suksess"). Så return er ikke det du vil ha.

Det kan være lurt å konvertere return-setningen din til en echo-setning - på den måten kan funksjonsutgangen din fanges opp ved hjelp av $()-klammer, som ser ut til å være akkurat det du vil ha.

Her er et eksempel:

function fun1(){
  echo 34
}

function fun2(){
  local res=$(fun1)
  echo $res
}

En annen måte å få returverdien på (hvis du bare vil returnere et heltall 0-255) er $?.

function fun1(){
  return 34
}

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

Vær også oppmerksom på at du kan bruke returverdien til å bruke boolsk logikk som fun1 || fun2 vil bare kjøre fun2 hvis fun1 returnerer en 0 verdi. Standard returverdi er utgangsverdien for den siste setningen som ble utført i funksjonen.

Kommentarer (12)

$(...) fanger opp teksten som sendes til stdout av kommandoen som finnes i den. return sender ikke ut til stdout. $? inneholder resultatkoden for den siste kommandoen.

fun1 (){
  return 34
}

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

Anvisningen return angir avslutningskoden for funksjonen, omtrent det samme som exit vil gjøre for hele skriptet.

Avslutningskoden for den siste kommandoen er alltid tilgjengelig i variabelen $.


function fun1(){
  return 34
}

function fun2(){
  local res=$(fun1)
  echo $? # 
Kommentarer (0)