2013-03-05 12 views
5

मैं अपनी स्क्रिप्ट में विकल्पों की एक बड़ी सूची चाहता हूं। उपयोगकर्ता इनपुट देने जा रहा है जो केवल उन विकल्पों में से एक से मेल खाएगा। मैं एक ही कमांड चलाने के लिए कई अलग-अलग विकल्प प्राप्त करने में सक्षम होना चाहता हूं लेकिन मुझे लगता है कि ओआरएस काम नहीं कर रहा है। नीचे क्या मैंने सोचा था कि यह एक या बी लाइन काम करने के तरीके पर किसी भी विचार की तरह दिखना चाहिए?मैं एक या टीसीएल स्विच स्टेटमेंट में कैसे उपयोग करूं?

switch -glob -- $opt { 
    "a" || "b" { 
     puts "you selected a or b, probably not both" 
    } 
    default { 
     puts "Your choice did not match anything" 
    } 
} 

उत्तर

10

तुम एक मामले के लिए - निकाय के रूप में उपयोग कर सकते हैं, गिर के माध्यम से करने के लिए अगले शरीर के लिए, के रूप में Tcl Manual में विस्तार से बताया:

एक संस्था के रूप निर्दिष्ट है, तो "-" इसका मतलब है कि अगले पैटर्न के लिए शरीर भी शरीर के रूप में इस पैटर्न के लिए (यदि अगले पैटर्न भी एक है इस्तेमाल किया जाना चाहिए "-" का शरीर तब उसके बाद शरीर का उपयोग किया जाता है, और इतने पर)। यह सुविधा कई पैटर्न के बीच एक एकल शरीर को साझा करना संभव बनाता है।

switch -glob -- $opt { 
    "*a*" - 
    "*b*" { 
     puts "you selected a or b, probably not both" 
    } 
    default { 
     puts "Your choice did not match anything" 
    } 
} 
:

इसके अलावा, अगर अपने विकल्पों concatentated पात्रों में से एक बड़ा स्ट्रिंग कर रहे हैं, आप वाइल्डकार्ड के साथ अपने विकल्प पैटर्न bookend करने के लिए अपने मामलों केवल पूर्ति करेंगे, जब opt केवल एक ही विकल्प होता है जा रहे हैं, या

+0

धन्यवाद, कि वही है जो मुझे जानने की जरूरत है। – SuperTetelman

1

दो तरीके हैं। the switch documentation examples से: "ग्लोब मिलान और गिरावट के माध्यम से शरीर का उपयोग करना alternations के साथ नियमित अभिव्यक्ति लेखन के लिए एक विकल्प है ..."

0

इसके अलावा इस काम कर रहे:

switch -regexp -- $opt { 
    a|b { 
     puts "you selected a or b, probably not both" 
    } 
    default { 
     puts "Your choice did not match anything" 
    } 
} 

ध्यान दें: के बीच कोई रिक्त स्थान "a | b"

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