开发者

Explanation of colon operator in ": ${foo=value}"

I understand the colon operator in bash that acts like a null, and I know it's used in parameter expansion, as well as being used other ways, but can someone explain this:

: ${SOMETHING='value'}

From experimentation I know that this sets the environment variable $SOMETHING to 'value' but why?

"Just because it does" is a valid answer but then please point me to the documentation for it (which I ca开发者_JAVA百科n't seem to find) or a proper name for this usage would be useful. I'm hoping there's a more enlightening explanation though.


The expression ${SOMETHING='value'} sets SOMETHING to value if it isn't already set. This is a useful operator to have in many situations. However, it also returns the assigned value, so if you simply executed

${SOMETHING='value'}

then your shell would try to invoke the command value. This might or might not do something unwanted; at the least it would throw a message "value: command not found".

To avoid this you can use the no-op :, which evaluates its argument and then throws it away, rather than executing it. This is documented here.


Explained here : http://tldp.org/LDP/abs/html/parameter-substitution.html

If parameter not set, set it to default.

Both forms nearly equivalent. The : makes a difference only when $parameter has been declared and is null, [1] as above.

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

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜