Что означает вопросительный знак в расширении параметра переменной bash, как в $ {var?}? - PullRequest
31 голосов
/ 17 января 2012

Что означает переменная bash, используемая следующим образом:

 ${Server?}

Ответы [ 2 ]

37 голосов
/ 17 января 2012

Работает почти так же, как (из справочной страницы 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 приводят к ошибке с :?, только неустановленная ошибка с ?.

14 голосов
/ 17 января 2012

Это означает, что сценарий должен прерваться, если переменная не определена

Пример:

#!/bin/bash
echo We will see this
${Server?Oh no! server is undefined!}
echo Should not get here

Этот скрипт выведет первый эхо и сообщение об ошибке «О, нет! ...».

См. Все замены переменных для bash здесь: http://tldp.org/LDP/abs/html/parameter-substitution.html

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...