2012-11-12 15 views
7

Tcsh kullanmak istemiyorum, ancak maalesef bu durumda bir seçeneği yok. Yani lütfen "başka bir kabuk kullan" cevabı yok!Bir ortam değişkeni ya bozuk ya da boş dizeye ayarlanmış mı kontrol edilir?

Şu anda bir ortam değişkeninin her ikisinin de ayarlanmış olup olmadığını kontrol etmeye çalışıyorum ve kullanışlı bir işe ayarlanmış. Yani ne yapmak istiyorum şudur:

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

sorun $ HAPPYVAR tanımlı değilse (ortam değişkeni yedek erken olur çünkü), bu ifadenin ikinci yarısında dışarı hata olacaktır. İç içe geçmiş ifadeler kullanabilirdim, ama sonra da “başka” çalışmamın doğru bir şekilde çalışmasını sağlayacak problemlerim olurdu ("... blah ..." olsun ya da olmasın).

Bunu yapmak için güzel, temiz bir çözüm olan var mı?

+0

Aynı kavram üzerinde çalışırken, komutumun blokta işlenmediğini, sadece HAPPYVAR: undefined değişkeni ve sona erdiğini, blokta çalışacak şekilde nasıl çalışmasını sağlayabildiğini buldum. –

cevap

5

muhtemelen daha güzel bir yolu yoktur, ancak yürütme geciktirmek için eval kullanabilirsiniz:

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

Bu ihtiyaçları için çalışmak gibi görünüyor.

test çalışmıyor ya, bu da çalışacak olursa:

if ($?HAPPYVAR && { eval 'if ($HAPPYVAR == "") exit 1' }) then 

Ah csh.

+0

Umduğum şık çözüm değil, kesinlikle işe yarayacaktı. Eğer daha güzel bir çözüm bilen varsa, ben hep kulaklarım. – spookypeanut

İlgili konular