2013-10-11 4 views
7

काम नहीं कर रहा मिलान तो मैं इस समारोहबैश regex

function test(){ 
local output="CMD[hahahhaa]" 
if [[ "$output" =~ "/CMD\[.*?\]/" ]]; then 
    echo "LOOL" 
else 
    echo "$output" 
fi; 

} 

लेकिन बजाय "Lool" कमांड लाइन में परीक्षण होगा उत्पादन $ उत्पादन को क्रियान्वित इस तथ्य के बावजूद है कि पैटर्न $ उत्पादन मिलान किया जाना चाहिए ...

है

मैंने क्या गलत किया?

+0

क्या आप गैर-लालची मैच के रूप में '। *?' का उपयोग करने की कोशिश कर रहे हैं? 'bash' उस पर्ल-स्टाइल ऑपरेटर का समर्थन नहीं करता है। फॉरवर्ड स्लेश पर्ल के मिलान सिंटैक्स का भी हिस्सा हैं, नियमित अभिव्यक्ति का हिस्सा नहीं। – chepner

उत्तर

13

उद्धरण "" का प्रयोग न करें

if [[ "$output" =~ ^CMD\[.*?\]$ ]]; then 


अद्यतन: (प्रतिक्रिया @frhd करने के लिए)

ठीक है, regex ऑपरेटर =~ एक गैर उद्धृत नियमित अभिव्यक्ति पर उम्मीद है अपने आरएचएस और केवल एक उप-स्ट्रिंग मैच करता है जब तक एंकर ^ (इनपुट की शुरुआत) और $ (ई इनपुट के एनडी) का उपयोग पूरे एलएचएस से मेल खाने के लिए भी किया जाता है।

कोटेशन"" ओवरराइड इस व्यवहार और एक साधारण स्ट्रिंग मैच बजाय अर्थात मिलान इन सभी पात्रों \[.*?\] सचमुच की तलाश शुरू होता है मजबूर।

+0

+1 मेरा जवाब हटाना पड़ा :) – anubhava

+0

चलो, यह भी काम करता होगा :) –

+0

यह होगा लेकिन आपका जवाब लगभग 30sec तेज – anubhava