兩種變數(shù)取用的方法,分別是這樣:
[root@linux ~]# echo $HOME [root@linux ~]# echo ${HOME} |
那么,在那個(gè) ${variable} 的使用方法中,其實(shí),我們還可以將變數(shù)進(jìn)行一些修訂的工作喔! 只要加上一些字符標(biāo)志,后面再接著使用比對(duì)字串,就能夠修改變數(shù)的內(nèi)容了!我們?nèi)〉紫碌睦觼?lái)說(shuō)明:在底下的例子中,假設(shè)我的變數(shù)名稱為 vbird ,且內(nèi)容為 /home/vbird/testing/testing.x.sh。
1. 完整呈現(xiàn) vbird 這個(gè)變數(shù)的內(nèi)容; [root@linux ~]# vbird="/home/vbird/testing/testing.x.sh" [root@linux ~]# echo ${vbird} /home/vbird/testing/testing.x.sh 2. 在 vbird 變數(shù)中,從最前面開(kāi)始比對(duì),若開(kāi)頭為 / ,則刪除兩個(gè) / 之間的所有資料,亦即 /*/ [root@linux ~]# echo ${vbird##/*/} testing.x.sh <==刪除了 /home/vbird/testing/ [root@linux ~]# echo ${vbird#/*/} vbird/testing/testing.x.sh <==僅刪除 /home/ 而已 # 這兩個(gè)小例子有趣了~變數(shù)名稱后面如果接了兩個(gè) ## ,表示在 ## # 后面的字串取‘最長(zhǎng)的’那一段;如果僅有一個(gè) # ,表示取‘最小的那一段’喔! 3. 呈上題,如果是從后面開(kāi)始,刪除 /* 呢? [root@linux ~]# echo ${vbird%%/*/} /home/vbird/testing/testing.x.sh <==都沒(méi)被刪除 [root@linux ~]# echo ${vbird%%/*} <==被刪除光了! [root@linux ~]# echo ${vbird%/*} /home/vbird/testing <==只刪除 /testing.x.sh 部分 # 這個(gè)例子當(dāng)中需要特別注意,那個(gè) % 比對(duì)的是‘最后面那個(gè)字元’的意思, # 所以啰,第一個(gè)方式當(dāng)然不對(duì)~因?yàn)?vbird 這個(gè)變數(shù)的內(nèi)容最后面是 h 而不是 / 啊! # 至于 %%/* 則是刪除‘最長(zhǎng)的那個(gè) /* ’,當(dāng)然就是全部喔!而 %/* 則是最短的那個(gè)! 4. 將 vbird 變數(shù)中的 testing 取代為 TEST [root@linux ~]# echo ${vbird/testing/TEST} /home/vbird/TEST/testing.x.sh [root@linux ~]# echo ${vbird//testing/TEST} /home/vbird/TEST/TEST.x.sh # 如果變數(shù)后面接的是 / 時(shí),那么表示后面是進(jìn)行‘取代’的工作~而且僅取代‘第一個(gè)’ # 但如果是 // ,則表示全部的字串都取代啊! |
這里您稍微留意一下就好了~反正就是變數(shù)后面可以接 #, ##, %, %%, /, // , 而他們存在的意義并不相同的啦~
另外,幾個(gè)不同的變數(shù)內(nèi)容還可以進(jìn)行判斷呢! 舉例來(lái)說(shuō),目前我需要用到兩個(gè)變數(shù),分別是 var 與 str , 那我想要針對(duì) str 這個(gè)變數(shù)內(nèi)容是否有設(shè)定成一個(gè)字串,亦即 "expr" 來(lái)決定 var 的內(nèi)容。 那我可以使用什么方法來(lái)進(jìn)行判斷呢?如果您會(huì)寫(xiě) shell script 的話, 直接用 shell script 就好了,如果不會(huì)寫(xiě),那么我們就透過(guò)簡(jiǎn)單的變數(shù)判斷吧!
Tips: |
|
變數(shù)設(shè)定方式 |
str 沒(méi)有設(shè)定 |
str 為空字串 |
str 已設(shè)定非為空字串 |
var=${str-expr} |
var=expr |
var= |
var=$str |
var=${str:-expr} |
var=expr |
var=expr |
var=$str |
var=${str+expr} |
var=expr |
var=expr |
var=expr |
var=${str:+expr} |
var=expr |
var= |
var=expr |
var=${str=expr} |
str=expr |
str 不變 |
str 不變 |
var=${str:=expr} |
str=expr |
str=expr |
str 不變 |
var=${str?expr} |
expr 輸出至 stderr |
var= |
var=str |
var=${str:?expr} |
expr 輸出至 stderr |
expr 輸出至 stderr |
var=str |
根據(jù)上面這張表,我們來(lái)進(jìn)行幾個(gè)范例的練習(xí)吧! ^_^
范例一:若 str 這個(gè)變數(shù)內(nèi)容存在,則 var 設(shè)定為 str ,否則 var 設(shè)定為 "newvar" [root@linux ~]# unset str; var=${str-newvar} [root@linux ~]# echo var="$var", str="$str" var=newvar, str= <==因?yàn)?str 不存在,所以 var 為 newvar [root@linux ~]# str="oldvar"; var=${str-newvar} [root@linux ~]# echo var="$var", str="$str" var=oldvar, str=oldvar <==因?yàn)?str 存在,所以 var 等于 str 的內(nèi)容 范例二:若 str 不存在,則 var 與 str 均設(shè)定為 newvar,否則僅 var 為 newvar [root@linux ~]# unset str; var=${str=newvar} [root@linux ~]# echo var="$var", str="$str" var=newvar, str=newvar <==因?yàn)?str 不存在,所以 var/str 均為 newvar [root@linux ~]# str="oldvar"; var=${str=newvar} [root@linux ~]# echo var="$var", str="$str" var=oldvar, str=oldvar <==因?yàn)?str 存在,所以 var 等于 str 的內(nèi)容 范例三:若 str 這個(gè)變數(shù)存在,則 var 等于 str ,否則輸出 "novar" [root@linux ~]# unset str; var=${str?novar} -bash: str: novar <==因?yàn)?str 不存在,所以輸出錯(cuò)誤訊息 [root@linux ~]# str="oldvar"; var=${str?novar} [root@linux ~]# echo var="$var", str="$str" var=oldvar, str=oldvar <==因?yàn)?str 存在,所以 var 等于 str 的內(nèi)容 # 上面這三個(gè)案例都沒(méi)有提到當(dāng) str 有設(shè)定,且為空字串的情況喔! # 您可以自行測(cè)試一下哩! |
雖然猛一看,覺(jué)得變數(shù)沒(méi)有什么奇特的地方,但是,如果仔細(xì)瞧一瞧,嘿!一堆環(huán)境變數(shù)與系統(tǒng)資源方面的變數(shù), 可是會(huì)影響到我們?cè)?bash 里頭是否能夠順利作業(yè)的呢!例如 PATH 啊、ulimit 之類(lèi)的~ 所以,您還是得要了解變數(shù)這個(gè)玩意才行喔! ^_^
使用最多的就是下面兩個(gè)
var=${str-expr}:只要有輸入,就使用輸入的值,哪怕輸入為空字符串,否則使用expr的默認(rèn)值
var=${str:-expr}:只有輸入非空字符串時(shí),才使用輸入值,否則使用expr的默認(rèn)值