2012-11-12 13 views
7

मैं tcsh का उपयोग नहीं करना चाहता, लेकिन दुर्भाग्य से इस स्थिति में कोई विकल्प नहीं है। तो कृपया "कोई अन्य खोल का उपयोग करें" जवाब नहीं!कैसे जांचें कि कोई पर्यावरण चर या तो अनसेट या खाली स्ट्रिंग पर सेट है या नहीं?

मैं वर्तमान में यह जांचने की कोशिश कर रहा हूं कि एक पर्यावरण चर दोनों सेट है, और यह कुछ उपयोगी पर सेट है। तो क्या मैं क्या करना चाहते हैं यह है:

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

समस्या यह है कि अगर $ HAPPYVAR सेट नहीं होने पर इसे बाहर अभिव्यक्ति की दूसरी छमाही पर त्रुटि (क्योंकि वातावरण चर प्रतिस्थापन जल्दी होता है) नहीं है। मैं नेस्टेड ifs का उपयोग कर सकता था, लेकिन फिर मुझे अपने "अन्य" को सही तरीके से काम करने में समस्याएं आती हैं (मुझे यह कहने के लिए एक और env var सेट करना होगा कि "... blah ..." हुआ या नहीं)।

किसी को भी ऐसा करने के लिए कोई अच्छा, साफ समाधान मिला है?

+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।

+0

मैं जिस शानदार समाधान की उम्मीद कर रहा था, वह निश्चित रूप से काम नहीं करेगा। अगर कोई एक सुंदर समाधान जानता है, तो मैं सभी कान हूं। – spookypeanut

संबंधित मुद्दे