我試圖了解如何在 bash 中使用函式(接收引數)。我沒有讓我的代碼作業,以下代碼說明了我的困難:
#!/bin/bash
fruit_code () {
if [[ "$1" == "apple" ]]; then
code=1
else
code=0
fi
return $code
}
for var in apple orange banana apple; do
code=fruit_code $var
echo $code
done
外殼(bash)抱怨說:
apple: command not found
orange: command not found
banana: command not found
apple: command not found
因此,引數的傳遞似乎無法正常作業。我看不到哪里出錯了。很感謝任何形式的幫助。為什么它不起作用?我應該做哪些改變才能讓它發揮作用?提前感謝大家。
親切的問候米格爾
uj5u.com熱心網友回復:
第一個問題是,如果要執行命令并將其輸出捕獲到變數中,則需要使用命令替換:
code=$(fruit_code "$var")
第二個問題是您的函式沒有向標準輸出寫入任何內容。它回傳一個退出狀態。呼叫函式$? 后會自動分配給它。改用這個:
fruit_code "$var"
echo $?
最后,shell 中的約定是 0 退出狀態表示成功,非零值表示失敗。在這種情況下,如果引數不是 ,您的函式“成功” apple。
uj5u.com熱心網友回復:
此行中有語法錯誤:
code=fruit_code $var
像這樣的語法:
foo=bar quux
表示您要在變數具有值quux的環境中運行命令。foobar
在您的情況下,quuxis $var,因此它將采用 的值$var并嘗試將其作為命令運行。這就是為什么您會收到錯誤說apple,orange等不是命令的原因。
我認為您真正想要的是運行fruit_code $var并將輸出存盤在變數中code,對嗎?
在這種情況下,您可以使用:
code=$(fruit_code $var)
或這個:
code=`fruit_code $var`
我更喜歡前者,因為它對我來說看起來更清晰并且可以輕松嵌套。
更新:在函式中回傳字串
此外,正如 chepner 在他的回答中所指出的那樣,并且您在下面的評論中也注意到,您正嘗試使用return該字串值作為函式的結果回傳,但return只能用于回傳數值作為函式(成功/錯誤/等),因此您嘗試使用表示您要回傳的字串的數值來解決它。
這太復雜了。
如果你想回傳一個字串,echo請改用,你可以使用$()or `` 如上所述來捕獲你的函式回傳的字串。
因此,將所有這些放在一起,您的代碼將如下所示:
#!/bin/bash
fruit_code () {
echo $1
}
for var in apple orange banana apple; do
code=$(fruit_code $var)
echo $code
done
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/487538.html
上一篇:使用字串而不是其名稱呼叫反應組件
下一篇:Python函式多載推薦方法
