Пара распространенных идиом (в любой оболочке POSIX, а не только в bash
, поэтому безопасно использовать также в сценариях sh
):
VER=${VER-$(./get_ver.rb)}
Или:
: "${VER=$(./get_ver.rb)}"
$ {VER-value}
заменяется на содержимое $ VER
, если установлено $ VER
(даже до пустого значения), и до значения
иначе.
$ {VER = value}
: то же самое, за исключением того, что значение
также присваивается $ VER
, если $ VER
ранее не было установлено.
Обратите внимание, что ваш [[-z $ VER]]
проверяет, является ли содержимое $ VER
пустым или нет, если установлено $ VER
. Если $ VER
задано, но пустое значение, оно все равно вернет истину. Вы можете выполнить [-z "$ {VER + yes}"]
(здесь используется стандартная команда [
вместо [[...]]
) Korn, хотя вы также можете сделать это с помощью [[...]]
), чтобы проверить, установлен ли $ VER
. Другой менее очевидный способ - использовать $ {VER +:} false
.