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

spo*_*nut 7 csh environment-variables

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

我目前正在尝试检查环境变量是否已设置,并设置为有用的东西.所以我想做的是:

if ($?HAPPYVAR && $HAPPYVAR != "") then
    ... blah...
else if ($?SADVAR && $SADVAR != "") then
    ... more blah ...
endif
Run Code Online (Sandbox Code Playgroud)

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

有人做了这个很好,最好的解决方案吗?

quo*_*ian 5

可能有更好的方法,但您可以使用eval来延迟执行:

if ($?HAPPYVAR && {eval 'test ! -z $HAPPYVAR'}) then
    ... blah...
else if ($?SADVAR && {eval 'test ! -z $SADVAR'}) then
    ... more blah ...
endif
Run Code Online (Sandbox Code Playgroud)

这似乎适合您的需求.

如果test不起作用或你,这也会起作用:

if ($?HAPPYVAR && { eval 'if ($HAPPYVAR == "") exit 1' }) then
Run Code Online (Sandbox Code Playgroud)

啊,csh.