shell 冒号

: ${TEST_LOOP:='1'}

如果不在前面加上:(冒号)命令,那么就会把${TEST_LOOP:='1'}本身当做一个命令来执行,报错是肯定的。

[root@node56 ~]# : abc=1234 
[root@node56 ~]# echo $abc 

[root@node56 ~]# : ${abc:=1234} 
[root@node56 ~]# echo $abc    
1234

[root@node56 ~]# ${abc:=1234} 
-bash: 1234: command not found

空命令[冒号]. 这个命令意思是空操作(即什么操作也不做). 它一般被认为是和shell的内建命令true是一样的。冒号":" 命令是Bash自身内建的, 它的退出状态码是真(即0)。

1         : Read gave us ifname = $ifname
2         read inet addr junk
3         : Read gave us inet = $inet addr = $addr

same as "#" to put the comments or comment out the codes  .
advantage to use ": "  for multiple line comment out  .

: '
code1
code2
code3   
'

like C use "/* */" for comment out

冒号(null command [colon])。

空命令,这个命令什么都不做,但是有返回值,返回值为0(即:true)。这个命令的作用非常奇妙。

1. 可做while死循环的条件;

2. 在if分支中作为占位符(即某一分支什么都不做的时候);

3. 放在必须要有两元操作的地方作为分隔符,如: ${username=`whoami`}

4. 在参数替换中为字符串变量赋值,在重定向操作(>)中,把一个文件长度截断为0(:>>这样用的时候,目标存在则什么都不做),这个只能在普通文件中使用,不能在管道,符号链接和其他特殊文件中使用;

5. 甚至你可以用来注释(#后的内容不会被检查,但:后的内容会被检查,如果有语句如果出现语法错误,则会报错);

6. 你也可以作为域分隔符,比如环境变量$PATH中,或者passwd中,都有冒号的作为域分隔符的存在;

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

原文地址:https://www.cnblogs.com/idyllcheung/p/10224933.html