考虑到 : 命令在 shell 脚本中明确不执行任何操作,它有什么用处?

考虑到 : 命令在 shell 脚本中明确不执行任何操作,它有什么用处?

在回答中这个关于 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

这将永远运行,除非调用breakexit,或者 shell 收到终止信号。

答案4

除了 # 字符之外,我只使用过这个字符来临时注释掉一行,在这种情况下注释掉该行会产生语法错误,因为 shell 语法中存在不允许空命令序列的缺陷:

if condition ; then
    :# temporarily commented out command
fi

如果没有 : 我们就会缺少命令序列,这是一个语法错误。

相关内容