Насколько переносимо это назначение оболочки?

VAR = $ {VAR: -значение}

Цель состоит в том, чтобы установить переменную окружения VAR в значение, если она уже не установлена.

Я вижу, что он работает в bash и тире, но насколько он переносим?

Это назначение переносимо, оно работает в любой оболочке POSIX. POSIX определяет это расширение как:

$ {Параметр: -слово}

Используйте значения по умолчанию. Если параметр не установлен или равен нулю, расширение слова должно быть заменено; в противном случае значение параметра должно быть заменено.

Но это также устанавливает значение VAR для значения, если VAR был установлен и null. Чтобы установить значение VAR в значение, если оно уже установлено, вы должны использовать:

 VAR=${VAR-value} 

Опускание двоеточия делает замену, только если переменная не установлена:

В вышеприведенных расширениях параметров использование двоеточия в формате должно приводить к тестированию параметра, который не задан или равен нулю; упущение двоеточия должно привести к тестированию параметра, который только отменен.