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

在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。

  • 2
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
在Linux中,有两种类型的命令shell命令和外部命令。 1. Shell命令Shell命令是Linux命令行提示符(Shell)的内置命令,是通过Shell程序(比如Bash、Zsh等)执行的。Shell命令提供了用于操作文件、目录、进程等操作系统资源的功能。它们是操作系统的一部分,不需要额外安装。例如,cd命令用于改变当前工作目录,ls命令用于列出目录内容,mkdir命令用于创目录等。 2. 外部命令:外部命令是不同于Shell的独立的可执行程序,这些程序通过Shell命令行调用来执行特定任务。外部命令通常是由第三方开发者编写的,并且可以通过软件包管理器或手动安装在系统中。例如,grep命令用于在文件中查找指定的文本,gcc命令用于编译C代码,ping命令用于测试网络连接等。 区别: - 执行速度:由于Shell命令Shell的一部分,它们可以直接调用操作系统资源,因此比外部命令执行速度更快。 - 功能扩展:外部命令通常由第三方开发者编写,可以提供更多功能和选项,而Shell命令的功能相对较少。 - 灵活性:外部命令的输入和输出可以通过Shell的重定向功能进行处理,可以与其他命令进行组合,灵活性更高。 总结:Shell命令是Linux Shell的内置命令,提供基本的操作系统资源操作功能;外部命令是独立的可执行程序,通过Shell命令行调用,可以提供更多高级功能。在实际使用中,我们可以根据需要选择使用Shell命令还是外部命令来完成任务。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值