在某些時刻我們經常需要判斷某個變量是否存在,若變量存在則使用既有的設置,若變量不存在則給予一個常用的設置。
(1)變量未被設置或者內容為空,則替換為新的內容.
new_var=${old_var-content}
范例一:測試一下是否存在 username 這個發量,若不存在則給予 username 內容為 root
[root@www ~]# echo $username
<==由於出現空白,所以 username 可能不存在,也可能是空字符串
[root@www ~]# username=${username-root}
[root@www ~]# echo $username
root <==因為 username 沒有設定,所以給予為 root的內容。
[root@www ~]# username="vbird tsai"
[root@www ~]# username=${username-root}
[root@www ~]# echo $username
vbird tsai <==因為 username 已經設定了,所以使用舊有癿設定而不以 root取代
上面的范例中,若username已經設定為空串的話,則不會替換,如果要想它進行次替換就可以用加上“:”,即# username=${username:-root}
范例二:若 username 未設定或者為空字符串,則將 username 內容設定為 root
[root@www ~]# username=""
[root@www ~]# username=${username-root}
[root@www ~]# echo $username
<==因為 username 被設定為空字符串了!所以當然還是保留為空字符串!
[root@www ~]# username=${username:-root}
[root@www ~]# echo $username
root <==加上『 : 』後若發量內容為空或者是未設定,都能夠以後面癿內容替換。
(2)"-"是不影響舊的內容,若想要替換新的內容則用“=”
[root@www ~]# unset str; var=${str=newvar}
[root@www ~]# echo var="$var", str="$str"
var=newvar, str=newvar <==因為 str 不存在,所以 var/str 均為 newvar
測試:如果 str 已存在了,測試一下 var 會發怎樣?
[root@www ~]# str="oldvar"; var=${str=newvar}
[root@www ~]# echo var="$var", str="$str"
var=oldvar, str=oldvar <==因為str存在,所以var等於str的內容
(3)如果我想知道,如果舊發量不存在時,整個測試就告知我『有錯誤』,此時就能夠使用問號
[root@www ~]# unset str; var=${str?無此變量}
-bash: str: 無此發量 <==因為 str 不存在,所以輸出錯誤訊息
(4)總結