3 回答

TA貢獻1966條經(jīng)驗 獲得超4個贊
盡管bash有一條return語句,但您只能用它指定函數(shù)的自身exit狀態(tài)(介于0和之間的值255,0表示“成功”)。所以return不是您想要的。
您可能希望將return語句轉(zhuǎn)換為echo語句-這樣,可以使用花$()括號捕獲函數(shù)輸出,這似乎正是您想要的。
這是一個例子:
function fun1(){
echo 34
}
function fun2(){
local res=$(fun1)
echo $res
}
獲取返回值的另一種方法(如果只想返回0-255的整數(shù))是$?。
function fun1(){
return 34
}
function fun2(){
fun1
local res=$?
echo $res
}
另外請注意,您可以使用返回值來使用布爾邏輯一樣fun1 || fun2將只運行fun2,如果fun1返回一個0值。默認返回值是函數(shù)中最后執(zhí)行的語句的退出值。

TA貢獻1836條經(jīng)驗 獲得超3個贊
$(...)捕獲其中包含的命令發(fā)送到stdout的文本。return不輸出到標準輸出。$?包含最后一個命令的結(jié)果代碼。
fun1 (){
return 34
}
fun2 (){
fun1
local res=$?
echo $res
}

TA貢獻1825條經(jīng)驗 獲得超6個贊
Bash中的函數(shù)與其他語言中的函數(shù)不同;它們實際上是命令。因此,函數(shù)的使用就好像它們是從您的路徑中獲取的二進制文件或腳本一樣。從程序邏輯的角度來看,應(yīng)該沒有任何區(qū)別。
Shell命令是通過管道(也稱為流)連接的,而不是像“真實”編程語言中那樣的基本或用戶定義的數(shù)據(jù)類型。沒有像命令的返回值這樣的東西,可能主要是因為沒有真正的方法來聲明它。它可能出現(xiàn)在手冊頁或--help命令的輸出中,但兩者都是人類可讀的,因此會隨風(fēng)而逝。
當(dāng)命令想要獲取輸入時,它將從其輸入流或參數(shù)列表中讀取該命令。在這兩種情況下,都必須解析文本字符串。
當(dāng)命令想要返回某些內(nèi)容時,它必須將echo其返回到其輸出流。另一種常用的方法是將返回值存儲在專用的全局變量中。寫入輸出流更清晰,更靈活,因為它還可以接收二進制數(shù)據(jù)。例如,您可以輕松返回BLOB:
encrypt() {
gpg -c -o- $1 # encrypt data in filename to stdout (asks for a passphrase)
}
encrypt public.dat > private.dat # write function result to file
正如其他人在該線程中編寫的一樣,調(diào)用者也可以使用命令替換$()來捕獲輸出。
并行地,該函數(shù)將“返回” gpg(GnuPG)的退出代碼。將退出代碼視為其他語言所沒有的獎勵,或者視您的性格而定,將其作為shell函數(shù)的“ Schmutzeffekt”。按照慣例,此狀態(tài)為0表示成功,否則為1-255范圍內(nèi)的整數(shù)。為了明確起見:(return如exit)只能接受0-255之間的值,而0以外的值不一定是錯誤的,正如經(jīng)常斷言的那樣。
當(dāng)您不提供顯式值時return,狀態(tài)取自Bash語句/函數(shù)/命令中的最后一條命令,依此類推。因此,總有一種狀態(tài),return這只是提供狀態(tài)的一種簡便方法。
添加回答
舉報