Вы можете использовать -v
и отрицать его, используя !
и тест для атрибута -x
вместо -z
checkForVariable() {
local env_var=
env_var=$(declare -p "$1")
if ! [[ -v $1 && $env_var =~ ^declare\ -x ]]; then
echo "Error: Define $1 environment variable"
exit 1
fi
}
Затем вы можете выполнить тестирование внутри скрипт.
checkForVariable ENVIRONMENT_NAME
Это согласно справочному тесту.
help test | grep -- '^[[:space:]]*-v'
Вывод
-v VAR True if the shell variable VAR is set.
А также !
help test | grep -- '^[[:space:]]*!'
Вывод
! EXPR True if expr is false.
Также для переменных env, как указал chepner, необходимо искать атрибут -x
, проверяя вывод declare -p ENV_NAME
help declare | grep -- '^[[:space:]]*-x'
Вывод
-x to make NAMEs export
Хотя вышеприведенное работает, если вы тестируете переменную внутри самого скрипта, а не в интерактивной оболочке. Теперь, если вы хотите сделать это в интерактивном сеансе, тогда для его работы необходим источник файла / скрипта.
Поместите это в ваш dotfiles / rcfiles
, как в ~/.profile
или ~/.bash_profile
или ~/.bashrc
checkForVariable() {
local env_var=
env_var=$(declare -p "$1")
if ! [[ -v $1 && $env_var =~ ^declare\ -x ]]; then
echo "Error: Define $1 environment variable"
return 1
fi
}
Просто нужно заменить exit
на return
, иначе ваш интерактивный сеанс завершится немедленно.
А затем отправьте этот rcfile.
source ~/.profile
Предполагая, что ~/.profile
находится там, где находится эта функция.
Вы можете выполнить тест во время интерактивного сеанса.
checkForVariable ENVIRONMENT_NAME
РЕДАКТИРОВАТЬ: Как указал chepner, я добавил тест для атрибута -x
.