5

Как проверить существование переменной окружения и получить её значение?

14

Я пишу скрипт на оболочке и у меня есть переменная, которая может либо принимать значение по умолчанию, либо значение из переменной окружения. Однако переменная окружения не обязательно должна присутствовать.

Например, предположим, что перед запуском скрипта я выполняю следующую команду:

export DEPLOY_ENV=dev

Как мне указать скрипту искать эту переменную окружения и сохранять её значение в переменной внутри скрипта? Более того, как сделать так, чтобы если эта переменная окружения не существует, то скрипт сохранял значение переменной по умолчанию?

4 ответ(ов)

8

Команда [ -z "${DEPLOY_ENV}" ] проверяет, имеет ли переменная DEPLOY_ENV длину, равную нулю. Если вы хотите установить значение переменной в зависимости от этого, можно сделать следующее:

if [[ -z "${DEPLOY_ENV}" ]]; then
  MY_SCRIPT_VARIABLE="Некое значение по умолчанию, так как DEPLOY_ENV не определена"
else
  MY_SCRIPT_VARIABLE="${DEPLOY_ENV}"
fi

Также можно использовать более компактный вариант:

[[ -z "${DEPLOY_ENV}" ]] && MY_SCRIPT_VARIABLE='значение по умолчанию' || MY_SCRIPT_VARIABLE="${DEPLOY_ENV}"

И даже ещё короче, используя стандартный способ подстановки значения по умолчанию:

MY_SCRIPT_VARIABLE="${DEPLOY_ENV:-значение_по_умолчанию}"

Эти конструкции позволяют элегантно обрабатывать ситуацию, когда переменная не определена, и устанавливать новое значение по умолчанию.

1

Если вам не важна разница между неустановленной переменной и переменной с пустым значением, вы можете использовать параметрическое расширение со значением по умолчанию:

foo=${DEPLOY_ENV:-default}

Если вы делаете различие, уберите двоеточие:

foo=${DEPLOY_ENV-default}

Также вы можете использовать оператор -v, чтобы явно проверить, установлена ли переменная:

if [[ ! -v DEPLOY_ENV ]]; then
    echo "DEPLOY_ENV не установлена"
elif [[ -z "$DEPLOY_ENV" ]]; then
    echo "DEPLOY_ENV установлена в пустую строку"
else
    echo "DEPLOY_ENV имеет значение: $DEPLOY_ENV"
fi
0

Нет никакой разницы между переменными окружения и переменными в скрипте. Переменные окружения просто определены раньше, вне скрипта, до его вызова. С точки зрения скрипта переменная — это просто переменная.

Вы можете проверить, определена ли переменная:

if [ -z "$a" ]
then
    echo "не определена"
else 
    echo "определена"
fi

Таким образом, вы можете установить значение по умолчанию для неопределённых переменных или сделать что-то другое.

Опция -z проверяет, является ли строка пустой (имеет нулевую длину). См. раздел CONDITIONAL EXPRESSIONS в справке man bash.

Кроме того, вы можете использовать команду set -u в начале вашего скрипта, чтобы он завершался с ошибкой, как только встретит неопределённую переменную. Это поможет избежать нежелательных последствий от неопределённых переменных.

0

Данный код на Bash проверяет, установлена ли переменная ENV_VAR и не является ли она пустой. Вот пояснение:

  1. В строке NEW_VAR="" мы инициализируем переменную NEW_VAR пустой строкой.
  2. Условие if [[ ${ENV_VAR} && ${ENV_VAR-x} ]] выполняет две проверки:
    • ${ENV_VAR}: проверяет, что переменная ENV_VAR существует и не пустая.
    • ${ENV_VAR-x}: используется для проверки, что переменная ENV_VAR не явно не задана. Если она не задана, то возвращает x, что делает всю конструкцию истинной, если переменная установлена.

Если обе проверки истинны, в переменную NEW_VAR присваивается значение ENV_VAR. В противном случае, NEW_VAR получает значение "new value".

Таким образом, в результате код присваивает NEW_VAR либо значение ENV_VAR, либо строку "new value" в зависимости от наличия и значимости переменной ENV_VAR.

Чтобы ответить на вопрос, пожалуйста, войдите или зарегистрируйтесь