shell函數(shù)內(nèi)調(diào)用另一個(gè)函數(shù)(不帶返回值和帶返回值)
一、函數(shù)B調(diào)用不帶返回值的函數(shù)A
新建文件,命名為 test.sh,添加如下代碼:
#!/bin/bash # 即將被調(diào)用的函數(shù)A function A(){ a="aaa" echo $a } # 函數(shù)B,直接調(diào)用A function B(){ A echo "bbb" } B
命令行中通過sh test.sh
執(zhí)行結(jié)果:
二、函數(shù)B調(diào)用帶返回值的函數(shù)A,并接收函數(shù)A的返回值進(jìn)行輸出
如果函數(shù)A有return,是不是在上面例子的基礎(chǔ)上,把A函數(shù)加多一個(gè)return就可以了呢?那么我們來試一下,代碼如下:
#!/bin/bash # 即將被調(diào)用的函數(shù)A function A(){ a=10 return $a } # 函數(shù)B function B(){ a=`A` # 注意,這里不能直接寫成a=A echo $a } B
命令行執(zhí)行sh test.sh
查看執(zhí)行結(jié)果:
等等,為什么結(jié)果輸出為空呢?原來shell中調(diào)用帶返回值的函數(shù)之后,返回值自動保存在$?中,所以將函數(shù)B改成如下即可:
#!/bin/bash # 即將被調(diào)用的函數(shù)A function A(){ a=10 return $a } # 函數(shù)B function B(){ a=`A` echo $? # 注意:這里要用英文的?,不能用中文的? } B
查看執(zhí)行結(jié)果:
然而,題主遇到返回結(jié)果并不是期望結(jié)果的情況。代碼如下:
#!/bin/bash # 即將被調(diào)用的函數(shù)A function A(){ a="aaa" return $a } # 函數(shù)B function B(){ a=`A` echo $? echo "bbb" } B
命令行執(zhí)行sh test.sh
查看結(jié)果:
這是什么意思呢?為什么是255,而不是期望的結(jié)果“aaa”?原因是shell中用return的話,return的值只能為整形,其它非整形的,如想要直接return是獲取不到的。
那么,該如何解決該問題呢?代碼如下:
#!/bin/bash # 即將被調(diào)用的函數(shù)A function A(){ a="aaa" echo $a } # 函數(shù)B function B(){ a=`A` echo $a echo "bbb" } B
查看結(jié)果:
怎么樣?居然不用return字段,很奇怪吧?shell的語法就是這么特立獨(dú)行。至此,問題得到解決。
到此這篇關(guān)于shell函數(shù)內(nèi)調(diào)用另一個(gè)函數(shù)(不帶返回值和帶返回值)的文章就介紹到這了,更多相關(guān)shell函數(shù)內(nèi)調(diào)用另一個(gè)函數(shù)內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
linux下使用ssh遠(yuǎn)程執(zhí)行命令批量導(dǎo)出數(shù)據(jù)庫到本地
這篇文章主要介紹了linux下使用ssh遠(yuǎn)程執(zhí)行命令批量導(dǎo)出數(shù)據(jù)庫到本地,需要的朋友可以參考下2015-04-04使用shell檢查并修復(fù)mysql數(shù)據(jù)庫表的腳本
這篇文章主要介紹了使用shell檢查并修復(fù)mysql數(shù)據(jù)庫表的腳本,需要的朋友可以參考下2014-03-03shell腳本實(shí)現(xiàn)ftp上傳下載文件功能
這篇文章主要介紹了shell腳本實(shí)現(xiàn)ftp上傳下載文件功能,本文給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值 ,需要的朋友可以參考下2019-08-08shell 腳本中常用的內(nèi)置變量(Bash 內(nèi)置變量)
在 Bash 解釋器中,內(nèi)置了許多變量,這些變量的功能是解釋器自帶的,我們在編寫shell腳本時(shí)如果能靈活的使用它們,對腳本的編寫效率以及差錯(cuò)大有幫助, 下面一一介紹這些變量,一起看看吧2021-05-05linux使用update-alternatives切換java版本
這篇文章主要介紹了linux使用update-alternatives切換java版本的相關(guān)資料,需要的朋友可以參考下2017-04-04