Sto lavorando con uno script bash e voglio eseguire una funzione per stampare un valore di ritorno:
function fun1(){
return 34
}
function fun2(){
local res=$(fun1)
echo $res
}
Quando eseguo fun2
, non stampa "34". Perché questo è il caso?
Anche se bash ha un'istruzione return
, l'unica cosa che puoi specificare con essa è lo stato di exit
della funzione (un valore tra 0
e 255
, 0 significa "successo"). Quindi return
non è quello che vuoi.
Potresti voler convertire la tua dichiarazione return
in una dichiarazione echo
- in questo modo l'output della tua funzione potrebbe essere catturato usando le parentesi graffe $()
, che sembra essere esattamente ciò che vuoi.
Ecco un esempio:
function fun1(){
echo 34
}
function fun2(){
local res=$(fun1)
echo $res
}
Un altro modo per ottenere il valore di ritorno (se vuoi solo restituire un intero 0-255) è $?
.
function fun1(){
return 34
}
function fun2(){
fun1
local res=$?
echo $res
}
Inoltre, nota che puoi usare il valore di ritorno per usare la logica booleana come fun1 || fun2
eseguirà solo fun2
se fun1
restituisce un valore 0
. Il valore di ritorno predefinito è il valore di uscita dell'ultima istruzione eseguita all'interno della funzione.
L'istruzione return
imposta il codice di uscita della funzione, proprio come exit
farà per l'intero script.
Il codice di uscita per l'ultimo comando è sempre disponibile nella variabile $?
.
function fun1(){
return 34
}
function fun2(){
local res=$(fun1)
echo $? # <-- Always echos 0 since the 'local' command passes.
res=$(fun1)
echo $? #<-- Outputs 34
}