Bash Shell - : 命令

3

冒号命令是一个空命令。

: 构造在条件变量的设置中也非常有用。例如,

: ${var:=value}

没有:,shell会尝试将$var作为一个命令来执行。 <=???

我不太理解上述语句中的最后一句话。有人能给我详细讲解一下吗?
谢谢。
4个回答

5

尝试

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}更好的方法。

:命令允许我们进行赋值而不执行任何其他操作。


2
我想,手册编写者的意思是:
: ${var:=value}

可以用作“say”的快捷方式。
if [ -z "$var" ]; then
    var=value
fi

-z字符串 如果字符串为空(空字符串),则为True - q0987

1

${var} 单独执行存储在$var中的命令。添加替换参数不会改变这一点,所以需要使用:来使其无效。


太真实了。我怀疑这是否真正向OP解释清楚了。 - sehe

0

试试这个:

$ help :
:: :
    Null command.

    No effect; the command does nothing.

    Exit Status:
    Always succeeds.

有没有其他人认为这本身就是一个微小的悖论? 无效(No effect)/退出状态:始终成功(Exit status: always succeeds)。这意味着当然它确实会做一些事情,只是不明显。它会进行变量扩展、赋值并破坏退出代码。 - sehe
是的,它几乎什么都不做;-) - Diego Torres Milano

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接