国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 系統(tǒng) > Linux > 正文

Shell中關(guān)于處理方法返回值問題詳解

2019-10-26 18:56:08
字體:
供稿:網(wǎng)友

背景

如今,不會(huì)Linux的程序員都不意思說自己是程序員,而不會(huì)shell編程就不能說自己會(huì)Linux。通過shell編程,寫一些工具批處理的時(shí)候,經(jīng)常需要自定義函數(shù)。更復(fù)雜點(diǎn)的情況下,可能有需要返回一個(gè)值。

由于在shell的世界中,并不像其他編程語言,它不支持我們所熟悉的方法返回。本文一起總結(jié)一下如何優(yōu)雅的解決返回值問題?

測(cè)試程序

我們一般通過$?來獲取上一個(gè)語句的輸出。看一下下面得測(cè)試語句:

新建testReturn腳本

returnString(){ return $1}returnString $1result=$?echo "result=$result"

現(xiàn)在我們有一個(gè)testReturn的腳本,里面有一個(gè)returnString的方法,我們希望它能夠直接返回我們輸入的參數(shù)。
當(dāng)我們分別以hello,500,12作為輸入?yún)?shù)時(shí),他的執(zhí)行和輸出情況是一樣的么?

./testReturn hello./testReturn 500./testReturn 12

在心中試著猜一下可能的情況,現(xiàn)在我們來揭曉答案:

程序輸出情況

在執(zhí)行hello的時(shí)候,并沒有輸出hello,而是報(bào)了一個(gè)return只接受數(shù)字類型的錯(cuò)誤

aven-mac-pro-2:avenwu.github.io aven$ ./testReturn hello./testReturn: line 23: return: hello: numeric argument requiredresult=255

在執(zhí)行500的時(shí)候,頁沒有輸出500,而是輸出了244

aven-mac-pro-2:avenwu.github.io aven$ ./testReturn 500result=244

執(zhí)行12的時(shí)候,終于正確了,返回12

aven-mac-pro-2:avenwu.github.io aven$ ./testReturn 12result=12

異常分析

現(xiàn)在我們分析一下returnString這個(gè)方法,為什么會(huì)有這么多種輸出情況呢?

首先他的寫法顯然是不嚴(yán)謹(jǐn)?shù)模膊皇峭耆e(cuò)誤,比如輸入12他就正確返回了。

return本身是shell里面的buildin函數(shù),筆者總結(jié)了下,他有以下幾個(gè)特征:

return可以返回?cái)?shù)字狀態(tài),常常用于返回0,1,標(biāo)識(shí)一個(gè)函數(shù)執(zhí)行后是否成功 注意return不可以返回非數(shù)字類型 同時(shí)數(shù)字類型也有可能發(fā)生溢出現(xiàn)象

全局變量

如果我們就是要返回一個(gè)字符串,怎么辦呢?可以通過定義全局變量來進(jìn)行賦值,類似于靜態(tài)變量/成員變量的寫法,我們讓他的作用域穿透整個(gè)上下文。

result=""returnString(){ result=$1}returnString $1echo "result=$result"

再看一下輸出,得到了我們需要的結(jié)果:

aven-mac-pro-2:avenwu.github.io aven$ ./testReturn helloresult=helloaven-mac-pro-2:avenwu.github.io aven$ ./testReturn 500result=500aven-mac-pro-2:avenwu.github.io aven$ ./testReturn 12result=12

但是這樣寫,會(huì)污染全局變量,并且result這個(gè)變量很容易在內(nèi)部和外部都被修改,導(dǎo)致內(nèi)部修改失效。

發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 开化县| 华蓥市| 海林市| 汝南县| 平定县| 合山市| 揭西县| 长海县| 邵东县| 甘德县| 桃江县| 二连浩特市| 东乡族自治县| 民县| 顺平县| 礼泉县| 东阿县| 兴隆县| 舞阳县| 柳江县| 武山县| 库车县| 河北区| 新闻| 孝义市| 司法| 东乡| 兴海县| 嵩明县| 德庆县| 荥阳市| 手游| 洛宁县| 和顺县| 日土县| 仙居县| 荔浦县| 新安县| 绥棱县| 仙居县| 凤山市|