Как проверить, не установлена ли переменная окружения или установлена ли пустая строка?
Я не хочу использовать tcsh, но, к сожалению, у меня нет выбора в этой ситуации. Поэтому, пожалуйста, не отвечайте "использовать другую оболочку"
В настоящее время я пытаюсь проверить, что переменная окружения и установлена, и установлена ли она на что-то полезное. Итак, что я хочу сделать, это:
if ($?HAPPYVAR && $HAPPYVAR != "") then
... blah...
else if ($?SADVAR && $SADVAR != "") then
... more blah ...
endif
Проблема состоит в том, что если $HAPPYVAR не задан, он выдаст ошибку во второй половине выражения (потому что замена переменной среды происходит раньше). Я мог бы использовать вложенные ifs, но тогда у меня были бы проблемы с тем, чтобы мое "else" работало правильно (мне пришлось бы установить другой env var, чтобы сказать, произошло ли "... бла..." или нет).
У кого-нибудь есть хорошее, аккуратное решение для этого?
1 ответ
Вероятно, есть более хороший способ, но вы можете использовать eval для отсрочки выполнения:
if ($?HAPPYVAR && {eval 'test ! -z $HAPPYVAR'}) then
... blah...
else if ($?SADVAR && {eval 'test ! -z $SADVAR'}) then
... more blah ...
endif
Кажется, это работает для ваших нужд.
Если test
не работает или у вас, это тоже будет работать:
if ($?HAPPYVAR && { eval 'if ($HAPPYVAR == "") exit 1' }) then
Ах, чш.