在回答中这个关于 shell 脚本中的注释的问题,表明这:
是一个空命令,明确不执行任何操作(但不用于注释)。
一个完全不执行任何操作的命令有什么用处呢?
答案1
我通常true
在循环中使用;我认为更清楚了:
while true; do
...
done
我发现:
真正方便的一个地方是 case 语句,如果您需要匹配某些内容但实际上不想做任何事情。例如:
case $answer in
([Yy]*) : ok ;;
(*) echo "stop."; exit 1 ;;
esac
答案2
最初,它是用来确定它是一个 Bourne shell 程序,而不是 C 编译的程序。这是在 shebang 和多种脚本语言(csh、perl)之前。您仍然可以运行以下脚本:
:
$ echo : > /tmp/xyzzy
$ chmod +x /tmp/xyzzy
$ ./xyzzy
$SHELL
它通常会针对(或)运行脚本/bin/sh
。
从那时起,主要用途是评估参数。我仍然使用:
: ${EDITOR:=vim}
在脚本中设置默认值。
答案3
:
对于编写必须从内部终止的循环很有用。
while :
do
...stuff...
done
这将永远运行,除非调用break
或exit
,或者 shell 收到终止信号。
答案4
除了 # 字符之外,我只使用过这个字符来临时注释掉一行,在这种情况下注释掉该行会产生语法错误,因为 shell 语法中存在不允许空命令序列的缺陷:
if condition ; then
:# temporarily commented out command
fi
如果没有 : 我们就会缺少命令序列,这是一个语法错误。