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

Я не хочу использовать 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

Ах, чш.

Другие вопросы по тегам