मैं एक वैरिएबल का उपयोग करने की कोशिश कर रहा हूं जिसमें |
एक case
स्टेटमेंट टेस्ट के साथ अलग-अलग स्ट्रिंग्स शामिल हैं । उदाहरण के लिए:
string="\"foo\"|\"bar\""
read choice
case $choice in
$string)
echo "You chose $choice";;
*)
echo "Bad choice!";;
esac
मैं कथन के पहले भाग को टाइप foo
या bar
निष्पादित करने में सक्षम होना चाहता हूं case
। हालांकि, दोनों foo
और bar
मुझे दूसरे के लिए ले:
$ foo.sh
foo
Bad choice!
$ foo.sh
bar
Bad choice!
के "$string"
बजाय का उपयोग कर $string
कोई फर्क नहीं पड़ता। न ही उपयोग करता है string="foo|bar"
।
मुझे पता है कि मैं इसे इस तरह से कर सकता हूं:
case $choice in
"foo"|"bar")
echo "You chose $choice";;
*)
echo "Bad choice!";;
esac
मैं विभिन्न वर्कअराउंड के बारे में सोच सकता हूं, लेकिन मैं यह जानना चाहूंगा कि क्या case
बैश में एक चर के रूप में इसका उपयोग करना संभव है । क्या यह संभव है और, यदि हां, तो कैसे?
read
बिट ने मुझे रोक दिया। मेरी राय में उपयोगकर्ता इनपुट सत्यापन, जो कि ऐसा प्रतीत होता है, case
पैटर्न मूल्यांकन सूची के शीर्ष पर नहीं होना चाहिए, और बल्कि *
डिफ़ॉल्ट पैटर्न के लिए नीचे झुका होना चाहिए, ताकि केवल वहां पहुंचने वाले परिणाम स्वीकार्य हो जाएं। फिर भी, क्योंकि यह मुद्दा पार्स / विस्तार आदेश है, तो दूसरे मूल्यांकन के लिए क्या कहा जा सकता है।
eval
, $ पसंद से बच सकते हैं, परेंस, तारांकन, अर्धविराम और नईलाइन्स। बदसूरत, लेकिन यह "काम करता है"।