我理解bash中的冒号操作符,其行为类似于a null,我知道它在parameter expansion中使用,并且以其他方式使用,但有人可以解释一下:
: ${SOMETHING='value'}
从实验中我知道这会将环境变量$SOMETHING
设置为'value'
,但为什么呢?
“仅仅因为它确实存在”是一个有效的答案,但请指出我的文档(我似乎无法找到),或者这个用法的正确名称会很有用。我希望有一个更有启发性的解释。
答案 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.