Работя със скрипт на bash и искам да изпълня функция, за да отпечатам върната стойност:
function fun1(){
return 34
}
function fun2(){
local res=$(fun1)
echo $res
}
Когато изпълня fun2
, тя не отпечатва "34". Защо е така?
Въпреки че в bash има оператор return
, единственото нещо, което можете да зададете с него, е собственото състояние на функцията exit
(стойност между 0
и 255
, като 0 означава "успех"). Така че return
не е това, което искате.
Може би ще искате да преобразувате оператора return
в оператор echo
- по този начин изходът на функцията може да бъде уловен с помощта на скоби $()
, което изглежда е точно това, което искате.
Ето един пример:
function fun1(){
echo 34
}
function fun2(){
local res=$(fun1)
echo $res
}
Друг начин за получаване на върнатата стойност (ако искате да върнете само цяло число от 0 до 255) е $?
.
function fun1(){
return 34
}
function fun2(){
fun1
local res=$?
echo $res
}
Също така, имайте предвид, че можете да използвате възвръщаемата стойност, за да използвате булева логика, като например fun1 || fun2
ще изпълни fun2
само ако fun1
върне стойност 0
. Стойността на връщане по подразбиране е стойността на изхода на последния оператор, изпълнен в рамките на функцията.
$(...)
улавя текста, изпратен на stdout от съдържащата се в него команда. return
не извежда данни в stdout. $?
съдържа кода на резултата от последната команда.
fun1 (){
return 34
}
fun2 (){
fun1
local res=$?
echo $res
}
Декларацията return
задава изходния код на функцията, подобно на това, което exit
ще направи за целия скрипт.
Кодът за изход за последната команда винаги е наличен в променливата $?
.
function fun1(){
return 34
}
function fun2(){
local res=$(fun1)
echo $? # <-- Always echos 0 since the 'local' command passes.
res=$(fun1)
echo $? #<-- Outputs 34
}