=Start=
搜索关键字:
- linux shell colon
- linux Bash 冒号
参考链接:
- http://stackoverflow.com/questions/3224878/what-is-the-purpose-of-the-colon-gnu-bash-builtin #全面
- http://stackoverflow.com/questions/10797835/while-vs-while-true
- http://unix.stackexchange.com/questions/31673/what-purpose-does-the-colon-builtin-serve
- http://superuser.com/questions/423980/colon-command-for-bash
- http://askubuntu.com/questions/549608/what-is-the-point-of-the-bash-null-operator-colon
- http://aplawrence.com/Basics/leading-colon.html
- http://www.cnblogs.com/chengmo/archive/2010/10/02/1841355.html
- http://blog.chinaunix.net/uid-1835840-id-2831521.html
- http://github.tiankonguse.com/blog/2015/04/19/bash-colon/
- http://blog.useasp.net/archive/2014/06/02/summary-of-the-special-characters-in-shell-on-linux.aspx
- http://www.jb51.net/article/51342.htm
- http://fanwen.freexs.cn/jiaoben/192343.html
- http://tldp.org/LDP/abs/html/special-chars.html
- http://linux.about.com/library/bl/open/newbie/blnewbie3.4.8.htm
- http://codingstandards.iteye.com/blog/1160298
- http://codingstandards.iteye.com/blog/786653
- http://www.gnu.org/software/bash/manual/bashref.html#Special-Parameters
- http://www.tutorialspoint.com/unix/unix-special-variables.htm
- http://www.gnu.org/software/bash/manual/html_node/Bourne-Shell-Builtins.html
参考解答:
$ 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=