我不想使用tcsh,但遗憾的是在这种情况下别无选择。所以请不要"使用另一个shell"解答!
我目前正在尝试检查环境变量是否已设置,并且它已设置为有用的内容。所以我想做的是:
if ($?HAPPYVAR && $HAPPYVAR != "") then
... blah...
else if ($?SADVAR && $SADVAR != "") then
... more blah ...
endif
问题是如果$ HAPPYVAR未设置,它将在表达式的后半部分出错(因为环境变量替换发生得很早)。我可以使用嵌套的ifs,但是那时我遇到了问题,而其他的"其他"正常工作(我必须设置另一个env var来说明" ......等等......"是否发生过。)
任何人都有这么好的,干净的解决方案吗?
答案 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。