我了解bash中冒号运算符的行为类似于null,我知道它用于参数扩展以及其他方式,但是有人可以解释一下:
: ${SOMETHING='value'}
通过实验,我知道这会将环境变量设置为$SOMETHING
,'value'
但是为什么呢?
“只是因为它确实是”是一个有效的答案,但是请向我指出它的文档(我似乎找不到),或者使用一个恰当的名称对此很有用。我希望有一个更启发性的解释。
Answers:
如果尚未将表达式${SOMETHING='value'}
设置为SOMETHING,value
则将其设置为。这在许多情况下都是有用的运算符。但是,它也返回分配的值,因此,如果您简单地执行
${SOMETHING='value'}
那么您的shell将尝试调用该命令value
。这可能会或可能不会做不需要的事情;至少它将抛出一条消息“值:找不到命令”。
为了避免这种情况,您可以使用no-op :
,它先评估其参数然后将其丢弃,而不是执行它。这在此处记录。
=
如果参数为unset
,则第一个变体()将使用默认值;:=
如果参数为null
或 unset
在这里解释:http : //tldp.org/LDP/abs/html/parameter-substitution.html
如果未设置参数,请将其设置为默认值。
两种形式几乎相等。仅当$ parameter已声明且为null时,:才有所不同,如上[1]。
echo ${var=abc} # abc echo ${var=xyz} # abc # $var had already been set to abc, so it did not change.
:
内置文件存在于bourne shell和ksh以及bash中。