在“:$ {foo = value}”中对冒号操作符的解释

我理解bash中的冒号操作符,它的作用类似于null ,我知道它用于参数扩展 ,以及用于其他方式,但有人可以解释这一点:

: ${SOMETHING='value'} 

从实验中,我知道这将环境variables$SOMETHING'value'但为什么?

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

expression式将SOMETHING设置为value如果它尚未设置。 在许多情况下,这是一个有用的操作符。 但是,它也返回分配的值,所以如果你只是执行

 ${SOMETHING='value'} 

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

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

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

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

两种forms几乎相同。 :只有当声明了$参数时才有所作为,并且如上所述为空,[1]。

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