8

我不想使用 tcsh,但不幸的是在这种情况下别无选择。所以请不要“使用另一个外壳”的答案!

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

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

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

任何人有任何好的,整洁的解决方案来做到这一点?

4

1 回答 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。

于 2012-11-12T17:35:00.163 回答