在shell中,冒號“:”是1個內(nèi)建(builtin)命令,格式以下:
: [arguments]
冒號命令本身沒甚么副作用,使用處景有限,1般用于參數(shù)擴(kuò)大,有以下幾種用法:
${parameter:-word} 如果parameter沒有設(shè)置或為空,替換為word;否則替換為parameter的值。
${parameter:+word} 如果parameter沒有設(shè)置或為空,不進(jìn)行任何替換;否則替換為word。
${parameter:=word} 如果parameter沒有設(shè)置或為空,把word賦值給parameter。終究替換為parameter的值。
${parameter:?word} 如果parameter沒有設(shè)置或為空,把word輸出到stderr,否則替換為parameter的值。
${parameter:offset} 擴(kuò)大為parameter中從offset開始的子字符串。
${parameter:offset:length} 擴(kuò)大為parameter中從offset開始的長度不超過length的字符。
例如:
$ foo=hellobash
$ echo ${foo}
hellobash
$ echo ${foo:-newword}
hellobash
$ echo ${foo}
hellobash
$ echo ${foo:+newword}
newword
$ echo ${foo}
hellobash
$ echo ${foo:?newword}
hellobash
$ echo ${foo}
hellobash
$ echo ${foo:=newword}
hellobash
$ echo ${foo}
hellobash
$ unset foo
$ echo ${foo}
$ echo ${foo:-newword}
newword
$ echo ${foo}
$ echo ${foo:+newword}
$ echo ${foo}
$ echo ${foo:?newword}
bash: foo: newword
$ echo ${foo}
$ echo ${foo:=newword}
newword
$ echo ${foo}
newword
$ echo ${foo:2}
wword
$ echo ${foo:2:3}
wwo
有時候,冒號命令用作占位符,甚么事情也不做,其退出狀態(tài)為0,以下:
$ :
$ echo $?
0
$ : abc
$ echo $?
0
在shell擴(kuò)大的模式匹配中,也用到了冒號,用法以下:
[[:class:]] 通過class指定字符種別,class可以是POSIX標(biāo)準(zhǔn)中的以下關(guān)鍵字:alnum、alpha、ascii、blank、cntrl、digit、graph、lower、print、punct、space、upper、word、xdigit,其中word表示大小寫字母、數(shù)字和下劃線。
例以下面例子中的字符串替換(數(shù)字替換為0,小寫字母替換為x,大寫字母替換為X):
var=helloBASH123
$ echo $var
helloBASH123
$ echo ${var//[[:digit:]]/0}
helloBASH000
$ echo ${var//[[:lower:]]/x}
xxxxxBASH123
$ echo ${var//[[:upper:]]/X}
helloXXXX123
在shell的數(shù)學(xué)運算中,支持像其它編程語言1樣的3元運算符,其中就用到了冒號,以下:
$ var=100
$ echo $var
100
$ (($var>100?var++:var--))
~$ echo $var
99
另外,在shell中冒號還用作變量間的分隔符,例如環(huán)境變量PATH。