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

在shell中,冒号“:”是1个内建(builtin)命令,格式以下:

: [arguments]

冒号命令本身没甚么副作用,使用处景有限,1般用于参数扩大,有以下几种用法:

${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的数学运算中,支持像其它编程语言1样的3元运算符,其中就用到了冒号,以下:

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

另外,在shell中冒号还用作变量间的分隔符,例如环境变量PATH。

波比源码 – 精品源码模版分享 | www.bobi11.com
1. 本站所有资源来源于用户上传和网络,如有侵权请邮件联系站长!
2. 分享目的仅供大家学习和交流,您必须在下载后24小时内删除!
3. 不得使用于非法商业用途,不得违反国家法律。否则后果自负!
4. 本站提供的源码、模板、插件等等其他资源,都不包含技术服务请大家谅解!
5. 如有链接无法下载、失效或广告,请联系管理员处理!
6. 本站资源售价只是赞助,收取费用仅维持本站的日常运营所需!
7. 如遇到加密压缩包,请使用WINRAR解压,如遇到无法解压的请联系管理员!

波比源码 » 【Bash百宝箱】shell内建命令之冒号

发表评论

Hi, 如果你对这款模板有疑问,可以跟我联系哦!

联系站长
赞助VIP 享更多特权,建议使用 QQ 登录
喜欢我嘛?喜欢就按“ctrl+D”收藏我吧!♡