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?
265
3
Selv om bash har en
return
-setning, er det eneste du kan spesifisere med den funksjonens egenexit
-status (en verdi mellom0
og255
, 0 betyr "suksess"). Såreturn
er ikke det du vil ha.Det kan være lurt å konvertere
return
-setningen din til enecho
-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:
En annen måte å få returverdien på (hvis du bare vil returnere et heltall 0-255) er
$?
.Vær også oppmerksom på at du kan bruke returverdien til å bruke boolsk logikk som
fun1 || fun2
vil bare kjørefun2
hvisfun1
returnerer en0
verdi. Standard returverdi er utgangsverdien for den siste setningen som ble utført i funksjonen.$(...)
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.Anvisningen
return
angir avslutningskoden for funksjonen, omtrent det samme somexit
vil gjøre for hele skriptet.Avslutningskoden for den siste kommandoen er alltid tilgjengelig i variabelen
$
.