| 形式 | 說明 |
|---|---|
| $# | 傳遞到腳本的參數個數 |
| $* | 以一個單字符串顯示所有向腳本傳遞的參數 |
| $$ | 腳本運行的當前進程ID號 |
| $! | 后臺運行的最后一個進程的ID號 |
| $@ | 與$*相同,但是使用時加引號,并在引號中返回每個參數。 |
| $- | 顯示Shell使用的當前選項,與set命令功能相同。 |
| $? | 顯示最后命令的退出狀態。0表示沒有錯誤,其他任何值表明有錯誤。 |
3.2 傳遞參數有空格
本節程序實現向被調用函數傳遞有空格的參數,我們將上節“helloworld!”加個空格變為“hello world!”如下:
testFun(){
echo $1
}
param="hello world!"
testFun $param
運行如下:

可以看到只有空格前的“hello”被打印了出來,空格后的“world!”并沒被打印出來(實際上空格后的"world!"被識別成了$2)
要傳遞有空格的參數也簡單,在傳遞時加上雙引號即可(單引號就不被認為是變量了所以不能用單引號),代碼如下:
testFun(){
echo $1
}
param="hello world!"
testFun "$param"
運行如下:

四、獲取返回值
4.1 返回整型
testFun(){
echo "helloworld!"
return 99
}
# 千萬要注意shell并不像其他語言直接返回返回值,其返回值放到$?中,這也是為什么只能返回整型的原因
# 所以這種承接方法是錯誤的,獲取到的值是echo打印的內容
# return_value=`testFun`
# 以下才是正確獲取通過return返回的返回值的正確寫法
testFun
echo "the return value is: $?"
4.2 返回字符串
我們在前面一直說shell函數只能返回整型不能返回字符串,我們試一下強行返回字符串,代碼如下:
testFun(){
echo "helloworld!"
return "success"
}
testFun
運行如下,可以看到運行到return處報錯“-bash: return: success: numeric argument required”

所以要通過return返回字符串是沒戲的,我們有兩個變通的方法,第一種是通過$()獲取函數的所有打印,代碼如下:
testFun(){
echo "helloworld!"
echo "success"
}
return_value=$(testFun)
echo "$return_value"
運行如下:

可以看到成功獲取到了‘success“。但同時也可以看到這種做法獲取到的被調用函數的所有輸出,單要返回值到得單獨解析一下
另外的一種做法是直接用一個變量,shell的變量都是全局的在被調用函數中賦值的變量在調用函數處也可獲取,代碼如下:
testFun(){
echo "helloworld!"
return_value="success"
}
testFun
echo $return_value
運行如下:

參考:
http://edu.jb51.net/linux/linux-shell-passing-arguments.html
以上就是詳解shell 函數定義與調用的詳細內容,更多關于Shell 函數定義與調用的資料請關注腳本之家其它相關文章!