shell中函式的呼叫方式有兩種,如下圖:
第一種方式,有點像c語言呼叫函式的風格,直接把函式的執行結果複製給變數!不過,這個賦值過程和c語言的函式賦值是不一樣的!
c語言中,函式呼叫,是將函式的返回值返回給被調函式,如:
[cpp]view plain
copy
fun()
[cpp]view plain
copy
main()
shell中函式呼叫的第一種方式,是將標準輸出傳遞給主程式的變數,而不是返回值!
所以請看以下程式:
[cpp]view plain
copy
#!/bin/sh
check_user()
userinfo()
while
true
doread username
m=`check_user $username`
[cpp]view plain
copy
#使用變數接收函式check_user傳遞的值
if [ -n "$m" ]
then
userinfo $m
exit
else
echo "$username is not exit!"
fi
done
而函式的第二種呼叫方式,是使用$?來接收上一程式的返回值狀態,也就是return返回的值。
下面程式中,if判斷後,return 0 或者 1,在這裡,我們就可以使用$?接收return的值,然後
儲存下來,繼而進行下一步的判斷!
[cpp]view plain
copy
check_user()
show_userinfo()
echo "input username : "
read username
check_user $username
num=$?
if [ $num -eq 0 ]
then
echo "the user '$username' is not exist."
exit
else
show_userinfo $n
fi
上面兩個程式的執行結果是一樣的,但是要注意著兩種函式的不同呼叫方式,以及其返回給
主調程式的到底是什麼。明白了這一點,才能準確知道到底使用何種方式接收返回值!
**:
shell 函式返回值接收問題
shell中函式的呼叫方式有兩種,如下圖 第一種方式,有點像c語言呼叫函式的風格,直接把函式的執行結果複製給變數!不過,這個賦值過程和c語言的函式賦值是不一樣的!c語言中,函式呼叫,是將函式的返回值返回給被調函式,如 fun main shell中函式呼叫的第一種方式,是將標準輸出傳遞給主程式的變數...
shell函式返回值不是
shell中美元符號的使用 找了半天原因,就在上篇博文裡,我在用shell寫素數時,發現了乙個問題,老師所說的 代表函式返回值的說法並不準確,所以查了一下,然後給用 大家展示一下具體效果 最後執行的命令的結束 返回值 函式呼叫之後執行了一條 echo 這是乙個很簡單的shell 乙個函式,引數為 i...
關於Shell中函式的返回值問題
bin sh sum sum 1 2 c sum 1 2 echo echo c 執行命令 bashtest 11 1 執行結果是 12 sum 1 2的結果 10 echo 的結果,因為return的值為10 12 echo c的結果,值為12,所以c並不會被附上return的值,echo c時呼...