如何检查环境变量是否未设置或已设置为空字符串?

8

我不想使用tcsh,但不幸的是在这种情况下没有选择。所以请不要回答“使用其他 shell”!

我目前正在尝试检查一个环境变量是否已经设置,并且它被设置为有用的内容。所以我想做的是:

if ($?HAPPYVAR && $HAPPYVAR != "") then
    ... blah...
else if ($?SADVAR && $SADVAR != "") then
    ... more blah ...
endif

问题在于如果$HAPPYVAR未设置,它将在表达式的后半部分出错(因为环境变量替换会提前发生)。我可以使用嵌套的if语句,但那样我会遇到正确使用“else”的问题(我必须设置另一个环境变量来说明是否发生了"...blah...")。
有没有人有一个漂亮、整洁的解决方案?

在处理相同的概念时,我发现我的脚本无法处理 if 块,它只是报告 HAPPYVAR:未定义变量并终止,我该如何使其工作以执行 if 块? - XYZ_Linux
1个回答

5
也许有更好的方法,但是您可以使用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

啊,csh。

不是我所期望的优雅解决方案,但肯定可行。如果有人知道更漂亮的解决方案,我全听着呢。 - spookypeanut

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接