shell函數內調用另一個函數(不帶返回值和帶返回值)
一、函數B調用不帶返回值的函數A
新建文件,命名為 test.sh,添加如下代碼:
#!/bin/bash # 即將被調用的函數A function A(){ a="aaa" echo $a } # 函數B,直接調用A function B(){ A echo "bbb" } B
命令行中通過sh test.sh
執行結果:
二、函數B調用帶返回值的函數A,並接收函數A的返回值進行輸出
如果函數A有return,是不是在上面例子的基礎上,把A函數加多一個return就可以瞭呢?那麼我們來試一下,代碼如下:
#!/bin/bash # 即將被調用的函數A function A(){ a=10 return $a } # 函數B function B(){ a=`A` # 註意,這裡不能直接寫成a=A echo $a } B
命令行執行sh test.sh
查看執行結果:
等等,為什麼結果輸出為空呢?原來shell中調用帶返回值的函數之後,返回值自動保存在$?中,所以將函數B改成如下即可:
#!/bin/bash # 即將被調用的函數A function A(){ a=10 return $a } # 函數B function B(){ a=`A` echo $? # 註意:這裡要用英文的?,不能用中文的? } B
查看執行結果:
然而,題主遇到返回結果並不是期望結果的情況。代碼如下:
#!/bin/bash # 即將被調用的函數A function A(){ a="aaa" return $a } # 函數B function B(){ a=`A` echo $? echo "bbb" } B
命令行執行sh test.sh
查看結果:
這是什麼意思呢?為什麼是255,而不是期望的結果“aaa”?原因是shell中用return的話,return的值隻能為整形,其它非整形的,如想要直接return是獲取不到的。
那麼,該如何解決該問題呢?代碼如下:
#!/bin/bash # 即將被調用的函數A function A(){ a="aaa" echo $a } # 函數B function B(){ a=`A` echo $a echo "bbb" } B
查看結果:
怎麼樣?居然不用return字段,很奇怪吧?shell的語法就是這麼特立獨行。至此,問題得到解決。
到此這篇關於shell函數內調用另一個函數(不帶返回值和帶返回值)的文章就介紹到這瞭,更多相關shell函數內調用另一個函數內容請搜索WalkonNet以前的文章或繼續瀏覽下面的相關文章希望大傢以後多多支持WalkonNet!
推薦閱讀:
- Shell四種運行方式(啟動方式)的實現
- shell 流程控制語句的具體使用
- linux shell 編程之函數使用詳解
- Shell退出狀態的使用
- Shell編程之/bin/bash和/bin/sh的區別淺析