冒号命令是一个空命令。
: 构造在条件变量的设置中也非常有用。例如,
: ${var:=value}
没有:,shell会尝试将$var作为一个命令来执行。 <=??? 我不太理解上述语句中的最后一句话。有人能给我详细讲解一下吗?
谢谢。
尝试
var=badcommand
$var
您将获得:
bash: badcommand: command not found
尝试
var=
${var:=badcommand}
你将会得到相同的结果。
Shell(例如bash)总是尝试将每个命令行中的第一个单词作为命令运行,即使在变量扩展后也是如此。
唯一的例外是
var=value
这里的“shell”是指特殊处理的命令行。
你提供的示例中的技巧在于${var:=value}
可以在命令行的任何位置起作用,例如:
# set newvar to somevalue if it isn't already set
echo ${newvar:=somevalue}
# show that newvar has been set by the above command
echo $newvar
但是我们实际上并不想回显该值,因此我们需要比
echo ${newvar:=somevalue}
更好的方法。
:
命令允许我们进行赋值而不执行任何其他操作。
: ${var:=value}
if [ -z "$var" ]; then
var=value
fi
${var}
单独执行存储在$var
中的命令。添加替换参数不会改变这一点,所以需要使用:
来使其无效。
试试这个:
$ help :
:: :
Null command.
No effect; the command does nothing.
Exit Status:
Always succeeds.
无效
(No effect)/退出状态:始终成功
(Exit status: always succeeds)。这意味着当然它确实会做一些事情,只是不明显。它会进行变量扩展、赋值并破坏退出代码。 - sehe