標籤:linux變數
變數操作總結:
${Var:-Value} 變數Var 為unset 或 null 則輸出Value。 有值則輸出變數Var的值。
${Var:=Value} 變數Var 為unset 或 null 則輸出Value,並且賦值於變數Var。 同上。
${Var:+Value} 變數Var 為unset 或 null 則輸出變數Var。 有值則輸出Value.
${Var:?Value} 變數Var 為unset 或 null 則輸出錯誤資訊Value。有值則輸出變數Var的值。
${Var-Value} 變數Var 為 unset 則輸出Value。 有值或為空白,則輸出變數Var的值。
${Var=Value} 變數Var 為 unset 則輸出Value,並且賦值於變數Var。 同上。
${Var+Value} 變數Var 為 unset 則輸出變數Var。有值或為空白,則輸出Value
${Var?Value} 變數Var 為 unset 則輸出錯誤資訊Value。 有值或為空白, 則輸出變數Var。
在這種的操作中,只有三種情況:1. 變數有值, 2. 變數沒有值, 3. 沒有變數
在上面加:的操作符中, 空不代表值, 在下面沒有:號的操作符中,空也代表為值。
${變數} 一般變數引用。 {} 一般情況可省略。
${#變數} 取變數中字元的個數(長度)。
一、 變數值的編輯:
1. 變數字元匹配則不輸出。 2. 變數內容字元位移並截出餘下的部分字元。
3. 變數字元的替換。
1. 所匹配到的變數內容將不顯示。
操作符:# ${變數#匹配字元}
$ do="Hello World"$ echo $doHello World$ echo ${do#He}llo World #He沒有顯示$ echo ${do#*l}lo World #從左至右匹配
#號在上面那種變數應用中,把左邊變數的值,按右邊的字串從左至右最短區配,
所區配到的字元不輸出。 支援萬用字元。
操作符: ##
$ echo ${do##*l}d #變數的值是Hello World, 從左邊一直匹配到倒數第二個字元l.
##號,這個則就是最長區配了。 記住是從左至右的區配順序。
操作符:% ${變數%匹配字元}
$ echo $doHello World$ echo ${do%ld}Hello Wor$ echo ${do%o*}Hello W
%號跟上面#號的形式都一樣,只不過是從右至左的匹配。 同樣的一個%號是 最短區配
操作符:%%
$ echo ${do%%o*}Hell
%%號,兩個%號,最長區配 。 萬用字元都是支援的。 畢竟都是在shell下,經由shell解釋輸出。
2. 上面的 # % 都是用來定義匹配變數內容的操作。而下面是用來定義固定的字元的操作。
${變數:數字}
$ echo $doHello World$ echo ${do:3}lo World #變數內容的前三個字元沒有顯示。
前面的3個字元沒有輸出, 專業點叫作 位移 , 向右位移了3個字元。
$ echo ${do:3:2}lo$ echo ${do:3:5}lo Wo
在上面位移的基礎上,再顯示向後截取的幾位字元。 空格可也是字元啊。
3. 替換變數內容。
${變數/匹配字元/替換字元}
$ echo ${do/l/L}HeLlo World
把第一個匹配到的字元,也就是l , 替換成大寫L .
這裡是只替換了第一個匹配到的字元。如果把變數後面的/變成兩個,就變成替換所有了。
${變數//匹配字元/替換字元}
$ echo ${do//l/L}HeLLo WorLd
替換了所有的l,這裡也是可以用萬用字元的, 但是這裡沒有最長最短匹配之說,只有替換1個還是替換所有的字元。至於效果,親們可以自己試試。
二、 變數....., 不知道叫什麼名了。
在這種的操作中,只有三種情況:1. 變數有值, 2. 變數沒有值, 3. 沒有變數
注意: 一般情況下,變數為空白也是一種值。 除非有特殊的操作。
do= do變數有值了。
declare var 產生了var變數,但var變數沒有值。
1. ${變數-值}
裡面的是減號。 那個值當然也可以用變數,不過要加上$,相當於變數引用。-號的左邊和右邊完全是不同的兩個部分。
$ echo $doHello World$ echo ${do-kaka} #在do有值的情況下,輸出do的值。Hello World $ unset do #刪除變數do$ echo ${do-kaka} #在沒有do變數的情況下,也就是沒有值。則輸出後面的值。kaka$ do= #在do為空白的情況下。$ echo ${do-kaka} #在do有值的情況下,輸出do的值,do是空值。 #所以輸出空。
這個的別一種方式一般在判斷預設值的時候用。如: do=${do:-kaka}
2. ${變數=值} 裡面是等號。
$ echo $doHello World$ echo ${do=kaka} #在do有值的情況下,輸出do的值。Hello World $ unset do$ echo ${do=kaka} #在沒有do變數的情況下,或沒有值。輸出後面的值kaka $ echo $dokaka #並且把kaka賦給變數do。
比 - 多了一項功能,只要在變數,就會把kaka賦給do。
3. ${變數+值} 裡面是加號。
$ echo $doHello World$ echo ${do+kaka} #do有值的情況下,輸出kakakaka$ unset do$ echo ${do+kaka} #在沒有do這個變數的情況下或者沒有值。那就沒有吧。 $ do=$ echo ${do+kaka} #空值,輸出kakakaka
看樣子正好與 - 相反, 這個是變數有值則用後面的值,而 - 號是沒值則用後面的值。
4. ${變數?值}
$ echo $doHello World$ echo ${do?kaka}Hello World$ unset do$ echo ${do?kaka} # 看到了沒,在沒有do這個變數的情況下或者沒有值。 # 提示錯誤資訊是 kakabash: do: kaka$ do=$ echo ${do?kaka}
除了沒有值的情況下會報錯,並且報錯資訊是kaka外,就沒有別的了。
下面還是關於 - = + ? 的,不過變成了 :- := :+ :? 。
不一樣之處就是把空值給抹去了,從此以後空就真的空了, 空不再代表值而存在,
而是跟unset一樣。
這裡說明一下, 以shell來說。其實unset就是把變數的記憶體空間的地址給撤銷了,
而變數空值,就是有變數的記憶體空間地址,不過記憶體空間裡面沒有資料。
1. ${變數:-值}
$ echo $doHello World$ echo ${do:-kaka}Hello World$ unset do$ echo ${do:-kaka} #沒有do變數,同樣的相當於沒有值。 輸出kakakaka$ do=$ echo ${do:-kaka} #空不再代表值, 在do沒有值的情況下 #輸出kakakaka
怎麼樣,區別只有一點, 空不再代表值了。
2. ${變數:=值}
$ echo $doHello World$ echo ${do:=kaka}Hello World$ echo $doHello World$ unset do$ echo ${do:=kaka}kaka$ echo $dokaka$ do=$ echo ${do:=kaka} #空不再代表值,所以輸出kakakaka$ echo $dokaka
還是那個意思,kaka輸出,並且賦值給了do。 空不再代表值了。
3. ${變數:+值}
$ echo $doHello World$ echo ${do:+kaka} #在do有值的情況下,輸出kakakaka$ unset do$ echo ${do:+kaka} #在do不存在的時候,也就是沒有值。 輸出do的值, #而do的值當然是不存在的,輸出空白行。$ do=$ echo ${do:+kaka} #do為空白,空不再代表值。 沒有值就不會輸出後面的值。 #同樣的空白行。
+ 號是有值才會用後面的那個值的。 跟-號正好相反。
4. ${變數:?值}
$ echo $doHello World$ echo ${do:?kaka}Hello World$ unset do$ echo ${do:?kaka} #沒有do變數,當然沒有值,報kaka錯誤。bash: do: kaka$ do=$ echo ${do:?kaka} #do為空白,代表沒有值。 報kaka錯誤。bash: do: kaka
這個跟-號也差不多了, 只不過還裡是輸出的錯誤資訊。
good boy, nice girl.
本文出自 “On Foot” 部落格,請務必保留此出處http://fanqie.blog.51cto.com/9382669/1649669
Linux 變數操作記錄