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 can’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 tovalueif 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 executedthen 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.