Предположения:
$ echo $SHELL
/bin/bash
$ /bin/bash --version | head -1
GNU bash, version 4.1.2(1)-release (x86_64-redhat-linux-gnu)
$ set -o nounset
Если вы хотите, чтобы неинтерактивный скрипт выводил ошибку и завершал работу, если переменная равна нулю или не установлена:
$ [[ "${HOME:?}" ]]
$ [[ "${IAMUNBOUND:?}" ]]
bash: IAMUNBOUND: parameter null or not set
$ IAMNULL=""
$ [[ "${IAMNULL:?}" ]]
bash: IAMNULL: parameter null or not set
Если вы не хотите, чтобы скрипт завершал работу:
$ [[ "${HOME:-}" ]] || echo "Parameter null or not set."
$ [[ "${IAMUNBOUND:-}" ]] || echo "Parameter null or not set."
Parameter null or not set.
$ IAMNULL=""
$ [[ "${IAMUNNULL:-}" ]] || echo "Parameter null or not set."
Parameter null or not set.
Вы можете даже использовать [
и ]
вместо [[
и ]]
выше, но последнее предпочтительнее в Bash.
Обратите внимание, что двоеточие делает выше. Из документов :
Другими словами, если двоеточие включено, оператор проверяет наличие как параметра, так и того, что его значение не равно нулю; если двоеточие опущено, оператор проверяет только наличие.
Очевидно, нет необходимости в -n
или -z
.
В целом, я обычно могу просто использовать [[ "${VAR:?}" ]]
. В соответствии с примерами, это печатает ошибку и завершается, если переменная равна нулю или не установлена.