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

- 日理万妓 2022-09-26 03:15 441阅读 0赞

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

  1. : [arguments]

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

  1. ${ parameter:-word} 如果parameter没有设置或者为空,替换为word;否则替换为parameter的值。
  2. ${ parameter:+word} 如果parameter没有设置或者为空,不进行任何替换;否则替换为word
  3. ${ parameter:=word} 如果parameter没有设置或者为空,把word赋值给parameter。最终替换为parameter的值。
  4. ${ parameter:?word} 如果parameter没有设置或者为空,把word输出到stderr,否则替换为parameter的值。
  5. ${ parameter:offset} 扩展为parameter中从offset开始的子字符串。
  6. ${ parameter:offset:length} 扩展为parameter中从offset开始的长度不超过length的字符。

例如:

  1. $ foo=hellobash
  2. $ echo ${ foo}
  3. hellobash
  4. $ echo ${ foo:-newword}
  5. hellobash
  6. $ echo ${ foo}
  7. hellobash
  8. $ echo ${ foo:+newword}
  9. newword
  10. $ echo ${ foo}
  11. hellobash
  12. $ echo ${ foo:?newword}
  13. hellobash
  14. $ echo ${ foo}
  15. hellobash
  16. $ echo ${ foo:=newword}
  17. hellobash
  18. $ echo ${ foo}
  19. hellobash
  20. $ unset foo
  21. $ echo ${ foo}
  22. $ echo ${ foo:-newword}
  23. newword
  24. $ echo ${ foo}
  25. $ echo ${ foo:+newword}
  26. $ echo ${ foo}
  27. $ echo ${ foo:?newword}
  28. bash: foo: newword
  29. $ echo ${ foo}
  30. $ echo ${ foo:=newword}
  31. newword
  32. $ echo ${ foo}
  33. newword
  34. $ echo ${ foo:2}
  35. wword
  36. $ echo ${ foo:2:3}
  37. wwo

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

  1. $ :
  2. $ echo $?
  3. 0
  4. $ : abc
  5. $ echo $?
  6. 0

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

  1. [[:class:]] 通过class指定字符类别,class可以是POSIX标准中的下列关键字:alnumalphaasciiblankcntrldigitgraphlowerprintpunctspaceupperwordxdigit,其中word表示大小写字母、数字和下划线。

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

  1. var=helloBASH123
  2. $ echo $var
  3. helloBASH123
  4. $ echo ${var//[[:digit:]]/0}
  5. helloBASH000
  6. $ echo ${var//[[:lower:]]/x}
  7. xxxxxBASH123
  8. $ echo ${var//[[:upper:]]/X}
  9. helloXXXX123

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

  1. $ var=100
  2. $ echo $var
  3. 100
  4. $ (($var>100?var++:var--))
  5. ~$ echo $var
  6. 99

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

发表评论

表情:
评论列表 (有 0 条评论,441人围观)

还没有评论,来说两句吧...

相关阅读