亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

Bash函數中的返回值

Bash函數中的返回值

我正在使用bash腳本,我想執行一個函數以打印返回值:function fun1(){  return 34}function fun2(){  local res=$(fun1)  echo $res}當我執行時fun2,它不會打印“ 34”。為什么會這樣呢?
查看完整描述

3 回答

?
慕標5832272

TA貢獻1966條經驗 獲得超4個贊

盡管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值。默認返回值是函數中最后執行的語句的退出值。


查看完整回答
反對 回復 2019-10-24
?
米脂

TA貢獻1836條經驗 獲得超3個贊

$(...)捕獲其中包含的命令發送到stdout的文本。return不輸出到標準輸出。$?包含最后一個命令的結果代碼。


fun1 (){

  return 34

}


fun2 (){

  fun1

  local res=$?

  echo $res

}


查看完整回答
反對 回復 2019-10-24
?
胡子哥哥

TA貢獻1825條經驗 獲得超6個贊

Bash中的函數與其他語言中的函數不同;它們實際上是命令。因此,函數的使用就好像它們是從您的路徑中獲取的二進制文件或腳本一樣。從程序邏輯的角度來看,應該沒有任何區別。


Shell命令是通過管道(也稱為流)連接的,而不是像“真實”編程語言中那樣的基本或用戶定義的數據類型。沒有像命令的返回值這樣的東西,可能主要是因為沒有真正的方法來聲明它。它可能出現在手冊頁或--help命令的輸出中,但兩者都是人類可讀的,因此會隨風而逝。


當命令想要獲取輸入時,它將從其輸入流或參數列表中讀取該命令。在這兩種情況下,都必須解析文本字符串。


當命令想要返回某些內容時,它必須將echo其返回到其輸出流。另一種常用的方法是將返回值存儲在專用的全局變量中。寫入輸出流更清晰,更靈活,因為它還可以接收二進制數據。例如,您可以輕松返回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

正如其他人在該線程中編寫的一樣,調用者也可以使用命令替換$()來捕獲輸出。


并行地,該函數將“返回” gpg(GnuPG)的退出代碼。將退出代碼視為其他語言所沒有的獎勵,或者視您的性格而定,將其作為shell函數的“ Schmutzeffekt”。按照慣例,此狀態為0表示成功,否則為1-255范圍內的整數。為了明確起見:(return如exit)只能接受0-255之間的值,而0以外的值不一定是錯誤的,正如經常斷言的那樣。


當您不提供顯式值時return,狀態取自Bash語句/函數/命令中的最后一條命令,依此類推。因此,總有一種狀態,return這只是提供狀態的一種簡便方法。


查看完整回答
反對 回復 2019-10-24

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號