變量內容的刪除、替代與替換(常用)

變量內容的刪除、替代與替換


變量內容的刪除
${parameter#*word}
${}:關鍵字,這種刪除模式必須存在;
parameter:變量名稱;
#:代表從變量內容的最前面開始向右刪除,且僅刪除最短的那個;
*word:代表要被刪除的部分,*是通配符來替代0到無窮多個任意字符。

#:  從變量內容最前面開始向右刪除符合替換文字的“最短的”那一個;

##:從變量內容最前面開始向右刪除符合替換文字的“最長的”那一個。


例子:

[root@www ~]# Dir=/usr/local/src
[root@www ~]# echo $Dir
/usr/local/src
[root@www ~]# echo ${Dir#*/}
usr/local/src
[root@www ~]# echo ${Dir##*/}
src


變量內容的替換
${parameter/pattern/string}
${parameter//pattern/string}
${}:關鍵字;
parameter:變量;
/或//:關鍵字
pattern:匹配模式,舊字符串
string:新字符串

/.../... :變量內容符合“舊字符串”,則第一個舊字符串會被新字符串替換;
//.../...:變量內容符合“舊字符串”,則全部的舊被新字符串替換。

例子:
[root@www ~]# Dir=/usr/local/src/usr/local/src
[root@www ~]# echo $Dir
/usr/local/src/usr/local/src
[root@www ~]# echo ${Dir/usr/USR}
/USR/local/src/usr/local/src
[root@www ~]# echo ${Dir//usr/USR}
/USR/local/src/USR/local/src


總結:

變量設置方式

功能

${var#keyword}

變量內容從頭開始的數據符合“keyword”,則將符合的最短數據刪除

${var##keyword}

變量內容從頭開始的數據符合“keyword”,則將符合的最長數據刪除

${var%keyword}

變量內容從尾向前的數據符合“keyword”,則將符合的最短數據刪除

${var%%keyword}

變量內容從尾向前的數據符合“keyword”,則將符合的最長數據刪除

${var/old_str/new_str}

變量內容符合“old_str”,則第一個old_str會被new_str替換

${var//old_str/new_srt}

變量內容符合“old_str”,則全部的old_str會被new_str替換


變量的測試與內容替換
${parameter:-word}
${}:關鍵字
parameter:變量
:-:關鍵字,被測試的選項
word:變量的替換內容



變量的設置方式

str沒有設置

str爲空字符串

str已經設置自爲非空字符串

var=${str-expr}

var=expr

var=

var=$str

var=${str:-expr}

var=expr

var=expr

var=$str

var=${str+expr}

var=

var=expr

var=expr

var={str:+expr}

var=

var=

var=expr

var=${str=expr}

str=expr

var=expr

str不變

var=

str不變

var=$str

var={str:=expr}

str=expr

var=expr

str=expr

var=expr

str不變

var=$str

var=${str?expr}

expr輸出至stderr

var=

var=str

var=${str:?expr}

expr輸出至stderr

expr輸出至stderr

var=str



常用的變量替換:
${parameter:-word}
Use Default Values.  If parameter is unset or null, the expansion  of  word  is  substituted.  Otherwise, the value of parameter is substituted.
使用默認值(不會修改變量原有內容),如果變量未設置或爲空,則使用word替換變量的默認值,無論${parameter:-word}的結果返回值是什麼,如果該變量的默認值未設置或爲空,那麼依然爲空。
[root@www ~]# unset FQDN                                          #變量沒有設置
[root@www ~]# echo $FQDN
[root@www ~]# echo ${FQDN:-www.snkof.com}    #變量沒有設置,使用word的值替換變量的值
www.snkof.com
[root@www ~]# FQDN=''                                                 #變量設置爲空字符串
[root@www ~]# echo ${FQDN:-www.snkof.com}     #如果變量爲空字符串則使用word的值替換變量的值
www.snkof.com
[root@www ~]# FQDN=www.google.com.hk          #變量設置了值
[root@www ~]# echo ${FQDN:-www.snkof.com}     #變量使用默認值
www.google.com.hk
[root@www ~]# echo $FQDN                      #變量依然使用默認值                              
www.google.com.hk


${parameter:=word}
Assign Default Values.  If parameter is unset or null, the expansion of word is assigned to parameter.  The value of parameter is then substituted.   Positional  parameters  and special parameters may not be assigned to in this way.
指定默認值、賦予默認值(將word的值賦予給該變量)。如果變量爲未設置或爲空,則把word的值替換成變量的默認值,而且將word的值保存在該變量中。位置參數和特殊參數不能以這種方式設置。
[root@www ~]# unset FQDN                                                #變量未設置
[root@www ~]# echo $FQDN                                              
[root@www ~]# echo ${FQDN:=www.snkof.com}           #變量未設置,使用word的值替換成變量的默認值
www.snkof.com
[root@www ~]# echo $FQDN                                              #並且將word的值設置爲FQDN變量的默認值
www.snkof.com
[root@www ~]# FQDN=''                                                     #變量設置爲空字符串
[root@www ~]# echo ${FQDN:=www.snkof.com}           #如果變量爲字符串則使用word的值替換成變量的默認值
www.snkof.com
[root@www ~]# echo $FQDN                                              #並且將word的值設置爲FQDN變量的默認值
www.snkof.com
[root@www ~]# FQDN=www.google.com.hk                    #變量設置了值
[root@www ~]# echo ${FQDN:=www.snkof.com}           #使用變量的默認值
www.google.com.hk
[root@www ~]# echo $FQDN                                              #變量的默認值沒有生髮改變
www.google.com.hk
在很多場景需要一旦變量原來的值爲空的時候,把word的值替換成變量的值,而且之後還要保存在這個變量中。
${parameter:=word}不但能夠完成變量替換,而且能夠將word的值賦值給變量的值爲空的這個變量。變量的值是word。


${parameter:?word}
Display  Error  if  Null or Unset.  If parameter is null or unset, the expansion of word(or a message to that effect if word is not present) is written to  the  standard  error and  the  shell,  if it is not interactive, exits.  Otherwise, the value of parameter is substituted.
如果變量的值爲空或沒有設置,不會再被賦予任何值,把word當作錯誤信息顯示出來,但會被輸出到標準錯誤輸出上去,爲了做到更好的引用這個變量的替換結果,還可以被直接實現替換,替換的結果還可以保留到其他額外變量的當中,以便以後引用。
[root@www ~]# unset FQDN
[root@www ~]# echo ${FQDN:?novalue}
-bash: FQDN: novalue        #錯誤信息
[root@www ~]# echo $FQDN
                #FQDN沒有任何值,只會顯示錯誤信息給予警示。

這個錯誤信息將會定向至標準錯誤輸出


${parameter:+word}:使用替換值
   Use Alternate Value.  If parameter is nullor  unset,  nothing is substituted, otherwise the expansion of word is substituted.
如果變量爲空或末設置,不做任何事情。如果設置變量值就將word的值替換成該變量的值。

[root@www ~]# echo $FQDN
                         #FQDN本身爲空值
[root@www ~]# echo ${FQDN:+www.google.com.hk}
                         #什麼也沒有做
[root@www ~]# echo $FQDN
                         #FQDN還是爲空值
[root@www ~]# FQDN=www.google.com.hk #給FQDN賦值
[root@www ~]# echo ${FQDN:+www.snkof.com}
www.snkof.com                #如果變量有值,則替換成word的值
[root@www ~]# echo $FQDN
www.google.com.hk                #但是FQDN的值不會被改變

與${parament:-word}相對應,只會顯示對應的值,不會對變量本身進行賦值。
在確保某一個變量有值的情況下,纔將其修改使用另外的值。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章