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

时间:2011-09-16 12:14:51

标签: bash

我理解bash中的冒号操作符,其行为类似于a null,我知道它在parameter expansion中使用,并且以其他方式使用,但有人可以解释一下:

: ${SOMETHING='value'}

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

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

2 个答案:

答案 0 :(得分:73)

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

${SOMETHING='value'}

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

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

答案 1 :(得分:6)

在此解释: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.