Explanation of colon operator in ": ${foo=value}"
Solution 1:
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.
Solution 2:
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.