Bash中冒号(:)的作用和用法


=Start=

搜索关键字:
  • linux shell colon
  • linux Bash 冒号
参考链接:
参考解答:
$ man :
$ man builtin

: [arguments]
	No effect; the command does nothing beyond expanding arguments and performing any specified redirections.  A zero exit code is returned.

上面的man手册说 冒号(:) 是”No effect”的,但如果真的是一点作用都没有的话,为什么会有存在的必要呢?

因为在历史上,Bourne shell没有内建的 true/false 命令,因此用 冒号(:) 代表 true ,用 “let 0” 这样的代表 false 。并且,在由 Bourne shell 衍生出来的shell中 冒号(:) 要比 true 稍微快那么一点。

而且,冒号(:)并不是一点作用都没有的,下面就是冒号(:)常见的用法:

1.变量默认值(参数扩展)

当变量VAR没有声明或者为NULL时,将VAR设置为默认值DEFAULT

${VAR:=DEFAULT}

2.空语句(占位符)

if [ -f "/etc/passwd" ]; then
    echo "hi"
else
    :
fi
3.清空文件
:> test
4.注释(#后的注释内容不会被检查,但:后的注释内容会被检查,如果有语句如果出现语法错误,则会报错)

格式:: your comment here
格式:# your comment here
单行注释

格式:: ‘comment line1
comment line2
more comments’
多行注释

5.作为函数名

不过这个会将冒号的本来意义转变(如果你不小心将冒号作为函数名,你可以使用unset -f : 来取消function的定义)

=EOF=

, ,

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注