2012-11-12 44 views
7

我不想使用tcsh,但不幸在這種情況下別無選擇。所以請不要「使用另一個shell」的答案!如何檢查環境變量是未設置還是設置爲空字符串?

我目前正試圖檢查一個環境變量是否都設置,並且它被設置爲有用的東西。因此,我想要做的是這樣的:

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

的問題是,如果$ HAPPYVAR是no,會出錯誤的表達下半年(因爲環境變量替換髮生早期)。我可以使用嵌套的ifs,但是當我的「其他」工作正常時(我不得不設置另一個env var來說是否發生「...... blah ...」)。

任何人都有這樣做的不錯的,整潔的解決方案?

+0

雖然工作在相同的概念,我發現我的腳本不處理如果塊,它只是說HAPPYVAR:未定義的變量和終止,我如何使它的工作,以便它執行如果塊? –

回答

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。

+0

不是我希望的優雅解決方案,但肯定會奏效。如果有人知道一個更漂亮的解決方案,我全是耳朵。 – spookypeanut