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