Объяснение оператора двоеточия в:: ${foo = value}

Я понимаю оператор двоеточия в bash, который действует как null, и я знаю, что он использовался в расширение параметра, а также используется другими способами, но может кто-то объяснить это:

: ${SOMETHING='value'}

Из эксперимента я знаю, что это устанавливает переменную окружения $SOMETHING в 'value', но почему?

"Только потому, что он это делает" является допустимым ответом, но тогда, пожалуйста, укажите мне документацию для него (которую я не могу найти), или подходящее имя для этого использования было бы полезно. Я надеюсь, что там будет более просветляющее объяснение.

Ответ 1

Выражение устанавливает SOMETHING на value, если оно еще не установлено. Это полезный оператор во многих ситуациях. Однако он также возвращает назначенное значение, поэтому, если вы просто выполнили

${SOMETHING='value'}

тогда ваша оболочка попытается вызвать команду value. Это может или не может сделать что-то нежелательное; по крайней мере, он выкинул бы сообщение "значение: команда не найдена".

Чтобы этого избежать, вы можете использовать no-op :, который оценивает его аргумент, а затем отбрасывает его, а не выполняет его.

Ответ 2

Разъяснение здесь: http://tldp.org/LDP/abs/html/parameter-substitution.html

Если параметр не установлен, установите его по умолчанию.

Обе формы почти эквивалентны. The: имеет значение только тогда, когда $был объявлен и равен нулю, [1], как указано выше.

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