it-swarm.cn

“:$ {foo = value}”中冒号运算符的说明

我理解bash中的冒号运算符就像 一个null ,我知道它用在 参数扩展 ,以及以其他方式使用,但有人可以解释一下:

: ${SOMETHING='value'}

从实验中我知道这会将环境变量$SOMETHING设置为'value',但为什么呢?

“只是因为它确实”是一个有效的答案,但请指出我的文档(我似乎无法找到)或这个用法的正确名称将是有用的。我希望有一个更有启发性的解释。

69
Peter Coulton

如果尚未设置,则表达式将SOMETHING设置为value。在许多情况下,这是一个有用的操作员。但是,它也会返回指定的值,因此如果您只是执行了

${SOMETHING='value'}

然后你的Shell会尝试调用命令value。这可能会或可能不会做不需要的事情;至少它会抛出一条消息“value:command not found”。

为了避免这种情况,你可以使用no-op :,它会评估它的参数,然后抛弃它,而不是执行它。

74
Kilian Foth

在这里解释: http://tldp.org/LDP/abs/html/parameter-substitution.html

如果未设置参数,请将其设置为默认值。

两种形式几乎相同。 :只有当声明了$参数并且为null时才会有所不同,如上所述[1]。

echo ${var=abc}   # abc
echo ${var=xyz}   # abc
# $var had already been set to abc, so it did not change.
6
Arnaud F.