shell 冒號減號[轉]

缺省值(:-

如果變量後面跟着冒號和減號,則變量後面跟着是這個變量的缺省值。

$ COMPANY=

$ printf “%s/n” “${COMPANY:-Unknown Company}”

Unknown Company

變量的實際值可以保持不變。

冒號也可以省略掉不用:

$ COMPANY=

$ printf “%s/n” “${COMPANY-Nightlight Inc.}”

$

指定缺省值(:=

如果變量後面跟着冒號和等號,則給空變量指定一個缺省值。

$ printf “%s/n” “${COMPANY:=Nightlight Inc.}”

Nightlight Inc.

$ printf “%s/n” “$COMPANY”

Nightlight Inc.

變量的實際值已經改變了。

去除冒號,則不會指定缺省值。

變量是否存在檢查(:?

如果變量後面跟着冒號和問號,則根據變量是否存在,顯示不同的信息。信息不是必選的。

printf “Company is %s/n” /

${COMPANY:?Error: Company has notbeen defined—aborting}”

如果沒有冒號則不會進行檢查。

覆蓋缺省值(:+)

如果變量後面跟着冒號和加號,則加好後面的字符串替換默認字符串。

$ COMPANY=”Nightlight Inc.”

$ printf “%s/n” “${COMPANY:+Company has been overridden}”

Company has been overridden

如果沒有冒號,變量也被字符串所替換,變量本身的值不改變。

替換部分字符串(:n

如果變量後面跟着一個冒號和數字,則返回該數字開始的一個子字符串,如果後面還跟着一個冒號和數字。則第一個數字表示開始的字符,後面數字表示字符的長度。

$ printf “%s/n” “${COMPANY:5}”

light Inc.

$ printf “%s/n” “${COMPANY:5:5}”

light

根據模板刪除字串(%#%%##

如果變量後面跟着井號,則返回匹配模板被刪除後的字串。一個井號爲最小可能性的匹配,兩個井號爲自大可能性的匹配。表達式返回模板右邊的字符。

$ printf “%s/n” “${COMPANY#Ni*}”

ghtlight Inc.

$ printf “%s/n” “${COMPANY##Ni*}”

$ printf “%s/n” “${COMPANY##*t}”

Inc.

$ printf “%s/n” “${COMPANY#*t}”

light Inc.

使用百分號,表達式返回模板左邊的字符

$ printf “%s/n” “${COMPANY%t*}”

Nightligh

$ printf “%s/n” “${COMPANY%%t*}”

Nigh

(在我的Linux系統中上述命令不起取用)

使用模板進行子字符串的替換(//

如果變量後只有一個斜槓,則兩個斜槓中間的字符串是要被替換的字符串,而第二個斜槓後面的字符串是要替換的字符串。如果變量後面跟着兩個斜槓,則所有出現在兩個斜槓中間的字符都要被替換爲最後一個斜槓後面的字符。

$ printf “%s/n” “${COMPANY/Inc./Incorporated}”

Nightlight Incorporated

$ printf “You are the I in %s” “${COMPANY//i/I}”

You are the I in NIghtlIght Inc.

如果模板一#號開始,則匹配以模板開始的字符,如果模板以%號結尾,則匹配以模板結尾的字符。

$ COMPANY=”NightLight Night Lighting Inc.”

$ printf “%s/n” “$COMPANY”

NightLight Night Lighting Inc.

$ printf “%s” “${COMPANY//Night/NIGHT}”

NIGHTLight NIGHT Lighting Inc.

$ printf “%s” “${COMPANY//#Night/NIGHT}”

NIGHTLight Night Lighting Inc.

(我的Linux中這個不起作用)

如果沒有指定新的值,則匹配的字符會被刪除。

$ COMPANY=”Nightlight Inc.”

$ printf “%s/n” “${COMPANY/light}”

Night Inc.

也可以使用範圍符號。例如:刪除所有字符串中的標點符號,使用範圍[:punct:]

$ printf “%s” “${COMPANY//[[:punct:]]}”

Nightlight Inc

使用星號或@符號替換變量會替換外殼腳本中所有的參數,同樣,在數組中使用星號或@符號也會替換數組中的所有元素。


原文地址:http://hi.baidu.com/tsuibin/item/f895f49c4ff2b6bf83d29589

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