В чем смысл переменной bash, используемой следующим образом:
${Server?}
В чем смысл переменной bash, используемой следующим образом:
${Server?}
Он работает почти так же, как (из bash
manpage):
${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
) и завершает script.
Фактическая разница между этой версией и версией не-двоеточия может быть найдена в man-странице bash
выше указанного раздела:
Если вы не выполняете расширение подстроки, используя формы, описанные ниже,
bash
проверяет недействительный или нулевой параметр. Опускание двоеточия приводит к тестированию только для параметра, который не задан.
Другими словами, приведенный выше раздел может быть изменен для чтения (в основном, выбирая "нулевые" биты):
${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> _
Там вы можете видеть, что, хотя и unset, и null-переменная приводят к ошибке с :?
, только неустановленные ошибки с ?
.
Это означает, что script должен прервать, если переменная не определена
Пример:
#!/bin/bash
echo We will see this
${Server?Oh no! server is undefined!}
echo Should not get here
Этот script будет печатать первое эхо и сообщение об ошибке "О нет!...".
Смотрите все замены переменных для bash здесь: http://tldp.org/LDP/abs/html/parameter-substitution.html
вид расширения параметров, подробнее см.: http://pubs.opengroup.org/onlinepubs/9699919799/utilities/V3_chap02.html#tag_18_06_02