Περισσότερα
Τιμή επιστροφής σε μια συνάρτηση Bash
Εργάζομαι με ένα σενάριο bash και θέλω να εκτελέσω μια συνάρτηση για να εκτυπώσω μια τιμή επιστροφής:
function fun1(){
return 34
}
function fun2(){
local res=$(fun1)
echo $res
}
Όταν εκτελώ την fun2
, δεν εκτυπώνει το "34". Γιατί συμβαίνει αυτό;
265
3
Παρόλο που το bash έχει μια δήλωση
return
, το μόνο πράγμα που μπορείτε να καθορίσετε με αυτήν είναι η κατάστασηexit
της συνάρτησης (μια τιμή μεταξύ0
και255
, 0 σημαίνει "επιτυχία"). Επομένως, τοreturn
δεν είναι αυτό που θέλετε.Ίσως θα θέλατε να μετατρέψετε την εντολή
return
σε εντολήecho
- με αυτόν τον τρόπο η έξοδος της συνάρτησης θα μπορούσε να καταγραφεί χρησιμοποιώντας τις αγκύλες$()
, που φαίνεται να είναι ακριβώς αυτό που θέλετε.Ακολουθεί ένα παράδειγμα:
Ένας άλλος τρόπος για να λάβετε την τιμή επιστροφής (αν θέλετε να επιστρέψετε απλώς έναν ακέραιο αριθμό 0-255) είναι
$?
.Επίσης, σημειώστε ότι μπορείτε να χρησιμοποιήσετε την τιμή επιστροφής για να χρησιμοποιήσετε λογική boolean, όπως
fun1 || fun2
θα εκτελέσει τηνfun2
μόνο αν ηfun1
επιστρέψει την τιμή0
. Η προεπιλεγμένη τιμή επιστροφής είναι η τιμή εξόδου της τελευταίας εντολής που εκτελέστηκε εντός της συνάρτησης.$(...)
καταγράφει το κείμενο που στέλνεται στο stdout από την εντολή που περιέχει. Τοreturn
δεν δίνει έξοδο στο stdout. Το$?
περιέχει τον κωδικό αποτελέσματος της τελευταίας εντολής.Η εντολή
return
ορίζει τον κωδικό εξόδου της συνάρτησης, όπως ακριβώς κάνει και η εντολήexit
για ολόκληρο το σενάριο.Ο κωδικός εξόδου για την τελευταία εντολή είναι πάντα διαθέσιμος στη μεταβλητή
$?
.