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?
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.
$(...)
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
}
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 $? # <-- Always echos 0 since the 'local' command passes.
res=$(fun1)
echo $? #<-- Outputs 34
}