Es strādāju ar bash skriptu un gribu izpildīt funkciju, lai izdrukātu atgriešanas vērtību:
function fun1(){
return 34
}
function fun2(){
local res=$(fun1)
echo $res
}
Kad izpildīju fun2
, tā neizdrukā "34". Kāpēc tā notiek?
Lai gan bash ir return
paziņojums, vienīgais, ko ar to var norādīt, ir funkcijas exit
statuss (vērtība no 0
līdz 255
, 0 nozīmē "veiksmi"). Tātad return
nav tas, ko jūs vēlaties.
Iespējams, jūs vēlaties pārvērst savu return
izteikumu par echo
izteikumu - tādā veidā jūsu funkcijas izvades rezultātus varētu uztvert, izmantojot $()
iekavās, kas, šķiet, ir tieši tas, ko jūs vēlaties.
Šeit ir piemērs:
function fun1(){
echo 34
}
function fun2(){
local res=$(fun1)
echo $res
}
Vēl viens veids, kā iegūt atgriešanas vērtību (ja vēlaties atgriezt tikai veselu skaitli 0-255), ir $?
.
function fun1(){
return 34
}
function fun2(){
fun1
local res=$?
echo $res
}
Tāpat ņemiet vērā, ka atgriešanas vērtību var izmantot, lai izmantotu bolu loģiku, piemēram, fun1 || fun2
izpildīs fun2
tikai tad, ja fun1
atgriezīs 0
vērtību. Pēc noklusējuma atgriešanas vērtība ir funkcijas pēdējā izpildītā izteikuma izejas vērtība.
$(...)
fiksē tekstu, kas ar tajā ietverto komandu tiek nosūtīts uz stdout. return
neizvada uz stdout. $?
satur pēdējās komandas rezultāta kodu.
fun1 (){
return 34
}
fun2 (){
fun1
local res=$?
echo $res
}
Ar return
izteikumu tiek iestatīts funkcijas izejas kods, līdzīgi kā exit
tiek iestatīts visam skriptam.
Pēdējās komandas izejas kods vienmēr ir pieejams mainīgajā $?
.
function fun1(){
return 34
}
function fun2(){
local res=$(fun1)
echo $? # <-- Always echos 0 since the 'local' command passes.
res=$(fun1)
echo $? #<-- Outputs 34
}