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

时间:2012-11-12 12:04:28

标签: environment-variables csh

我不想使用tcsh,但遗憾的是在这种情况下别无选择。所以请不要"使用另一个shell"解答!

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

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

问题是如果$ HAPPYVAR未设置,它将在表达式的后半部分出错(因为环境变量替换发生得很早)。我可以使用嵌套的ifs,但是那时我遇到了问题,而其他的"其他"正常工作(我必须设置另一个env var来说明" ......等等......"是否发生过。)

任何人都有这么好的,干净的解决方案吗?

1 个答案:

答案 0 :(得分: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。