8

tcsh は使いたくないのですが、残念ながらこの状況では仕方がありません。したがって、「別のシェルを使用する」という回答はしないでください。

現在、環境変数が設定されていることと、それが何か便利なものに設定されていることを確認しようとしています。だから私がやりたいことはこれです:

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

問題は、$HAPPYVAR が設定されていない場合、式の後半でエラーが発生することです (環境変数の置換が早期に行われるため)。ネストされた if を使用できますが、「else」を正しく機能させるのに問題が発生します (「...何とか...」が発生したかどうかを示すには、別の環境変数を設定する必要があります)。

これを行うための素敵できちんとした解決策はありますか?

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 に答える