Работает почти так же, как (из справочной страницы bash
):
${parameter:?word}
Display Error if Null or Unset. If parameter is null or unset, the expansion of word (or a message to that effect if word is not present) is written to the standard error and the shell, if it is not interactive, exits. Otherwise, the value of parameter is substituted.
Этот конкретный вариант проверяет, существует ли переменная (она определена и не равна нулю).Если так, он использует это.Если нет, он выводит сообщение об ошибке, указанное word
(или подходящее, если нет word
), и завершает сценарий.
Фактическая разница между этим и не двоеточной версией может бытьнаходится на справочной странице bash
над цитируемым разделом:
Если не выполнять раскрытие подстроки, используя формы, описанные ниже, bash
проверяет параметр, который не установлен или имеет значение null. Пропуск двоеточия приводит к проверке только для неустановленного параметра.
Другими словами, приведенный выше раздел можно изменить так, чтобы он читался (в основном убирая ноль)биты):
${parameter?word}
Display Error if Unset. If parameter is unset, the expansion of word (or a message to that effect if word is not present) is written to the standard error and the shell, if it is not interactive, exits. Otherwise, the value of parameter is substituted.
Разница иллюстрируется следующим образом:
pax> unset xyzzy ; export plugh=
pax> echo ${xyzzy:?no}
bash: xyzzy: no
pax> echo ${plugh:?no}
bash: plugh: no
pax> echo ${xyzzy?no}
bash: xyzzy: no
pax> echo ${plugh?no}
pax> _
Там вы можете видеть, что в то время как неустановленная переменная и null приводят к ошибке с :?
, только неустановленная ошибка с ?
.