您的位置:首页 > 运维架构 > Shell

【Bash百宝箱】shell内建命令之冒号

2016-09-19 20:29 411 查看
在shell中,冒号“:”是一个内建(builtin)命令,格式如下:

: [arguments]


冒号命令本身没什么副作用,使用场景有限,一般用于参数扩展,有以下几种用法:

${parameter:-word}    如果parameter没有设置或者为空,替换为word;否则替换为parameter的值。
${parameter:+word}    如果parameter没有设置或者为空,不进行任何替换;否则替换为word。
${parameter:=word}    如果parameter没有设置或者为空,把word赋值给parameter。最终替换为parameter的值。
${parameter:?word}    如果parameter没有设置或者为空,把word输出到stderr,否则替换为parameter的值。
${parameter:offset}    扩展为parameter中从offset开始的子字符串。
${parameter:offset:length}     扩展为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


有时候,冒号命令用作占位符,什么事情也不做,其退出状态为0,如下:

$ :
$ echo $?
0
$ : abc
$ echo $?
0


在shell扩展的模式匹配中,也用到了冒号,用法如下:

[[:class:]]    通过class指定字符类别,class可以是POSIX标准中的下列关键字:alnum、alpha、ascii、blank、cntrl、digit、graph、lower、print、punct、space、upper、word、xdigit,其中word表示大小写字母、数字和下划线。


例如下面例子中的字符串替换(数字替换为0,小写字母替换为x,大写字母替换为X):

var=helloBASH123
$ echo $var
helloBASH123
$ echo ${var//[[:digit:]]/0}
helloBASH000
$ echo ${var//[[:lower:]]/x}
xxxxxBASH123
$ echo ${var//[[:upper:]]/X}
helloXXXX123


在shell的数学运算中,支持像其它编程语言一样的三元运算符,其中就用到了冒号,如下:

$ var=100
$ echo $var
100
$ (($var>100?var++:var--))
~$ echo $var
99


另外,在shell中冒号还用作变量间的分隔符,例如环境变量PATH。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: