Я пишу оболочку script, где мне нужно проверить, установлена ли переменная среды, если она не установлена, я должен ее установить. Есть ли способ проверить оболочку script, установлена ли переменная среды или нет?
Проверьте, не установлена ли переменная окружения
Ответ 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.