![考虑到 : 命令在 shell 脚本中明确不执行任何操作,它有什么用处?](https://linux22.com/image/22741/%E8%80%83%E8%99%91%E5%88%B0%20%3A%20%E5%91%BD%E4%BB%A4%E5%9C%A8%20shell%20%E8%84%9A%E6%9C%AC%E4%B8%AD%E6%98%8E%E7%A1%AE%E4%B8%8D%E6%89%A7%E8%A1%8C%E4%BB%BB%E4%BD%95%E6%93%8D%E4%BD%9C%EF%BC%8C%E5%AE%83%E6%9C%89%E4%BB%80%E4%B9%88%E7%94%A8%E5%A4%84%EF%BC%9F.png)
在回答中这个关于 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
如果没有 : 我们就会缺少命令序列,这是一个语法错误。