Подтвердить что ты не робот

Проверьте, не установлена ​​ли переменная окружения

Я пишу оболочку script, где мне нужно проверить, установлена ​​ли переменная среды, если она не установлена, я должен ее установить. Есть ли способ проверить оболочку script, установлена ​​ли переменная среды или нет?

4b9b3361

Ответ 1

[ -z "$VARIABLE" ] && VARIABLE="abc"

if env | grep -q ^VARIABLE=
then
  echo env variable is already exported
else
  echo env variable was not exported, but now it is
  export VARIABLE
fi

Я хочу подчеркнуть, что [ -z $VARIABLE ] недостаточно, потому что вы можете иметь VARIABLE, но он не был экспортирован. Это означает, что это не переменная среды вообще.

Ответ 2

Стандартное решение условно назначить переменную (будь то в среде или нет):

: ${VAR=foo}

Это установит значение VAR в значение "foo", только если оно не установлено.
Чтобы установить VAR на "foo", если VAR не установлен или пустая строка, используйте:

: ${VAR:=foo}

Чтобы поместить VAR в среду, выполните следующие действия:

export VAR

Вы также можете сделать export VAR=${VAR-foo} или export VAR=${VAR:=foo}, но некоторые старые оболочки не поддерживают синтаксис присвоения и экспорта в той же строке. Кроме того, DRY; использование имени с обеих сторон оператора = является ненужным повторением. (Вторая строка, экспортирующая переменную, нарушает тот же принцип, но чувствует себя лучше.)

Обратите внимание, что в целом очень сложно определить, находится ли переменная в среде. Разбор вывода env не будет работать. Рассмотрим:

export foo='
VAR=var-value'
env | grep VAR

И это не работает, чтобы породить подоболочку и тест:

sh -c 'echo $VAR'

Это означает, что VAR установлен в подоболочке, что будет индикатором того, что VAR находится в среде текущего процесса, но может быть просто, что VAR задается при инициализации подоболочки. Функционально, однако, результат такой же, как если бы VAR находился в среде. К счастью, вам, как правило, не важно, находится ли VAR в среде или нет. Если вам это нужно, поместите туда. Если вам это нужно, выньте его.

Ответ 3

То, что вы хотите сделать, является родным в bash, оно называется заменой параметра:

VARIABLE="${VARIABLE:=abc}"

Если параметр VARIABLE не установлен, правая часть будет равна abc. Обратите внимание, что внутренний оператор: = может быть заменен на: - который проверяет, не установлен ли VARIABLE или пуст.

Ответ 4

if [ -z "$VARIABLE" ]; then
    VARIABLE=...
fi

Это проверяет, равна ли длина переменной $VARIABLE.