इसे देखें यदि ब्लॉक करें:
#!/bin/bash
str="m.m"
if [[ "${str}" =~ "m\.m" ]]; then
echo "matched"
else
echo "not matched"
exit 1
fi
exit 0
यह "मिलान" प्रिंट करना चाहिए, लेकिन यह नहीं है। मुझसे कहां गलती हो रही है?
इसे देखें यदि ब्लॉक करें:
#!/bin/bash
str="m.m"
if [[ "${str}" =~ "m\.m" ]]; then
echo "matched"
else
echo "not matched"
exit 1
fi
exit 0
यह "मिलान" प्रिंट करना चाहिए, लेकिन यह नहीं है। मुझसे कहां गलती हो रही है?
जवाबों:
रेगेक्स मैच में आपको कोटेशन निकालने की जरूरत है।
if [[ ${str} =~ m\.m ]]; then
बैश मैन पेज से:
[...] एक अतिरिक्त बाइनरी ऑपरेटर, = ~, उपलब्ध है, जैसा कि पूर्व = = और! = के साथ है। जब इसका उपयोग किया जाता है, तो ऑपरेटर के दाईं ओर के स्ट्रिंग को एक विस्तारित नियमित एक्सरे सायन माना जाता है और तदनुसार मिलान किया जाता है (जैसा कि रेगेक्स (3) में)। वापसी मान 0 है यदि स्ट्रिंग पैटर्न से मेल खाती है, और 1 अन्यथा। यदि नियमित अभिव्यक्ति वाक्यविन्यास रूप से गलत है, तो सशर्त अभिव्यक्ति का रिटर्न मान 2 है। यदि शेल विकल्प nocasematch सक्षम है, तो मैच अक्षर वर्णों के मामले के बिना किया जाता है। पैटर्न के किसी भी हिस्से को स्ट्रिंग के रूप में मिलान करने के लिए मजबूर करने के लिए उद्धृत किया जा सकता है।
तो उद्धरण के साथ, आप अच्छे-पुराने स्ट्रिंग मिलान का उपयोग कर रहे हैं।
यदि आपको पैटर्न में स्थान की आवश्यकता है, तो बस उनसे बच जाएं:
str="m m"
if [[ ${str} =~ m\ +m ]]; then
\
।
${str} =~ "needle"[0-9]{1}
क्या मुझे इसका उपयोग करना चाहिए या क्या करना चाहिए ${str} =~ needle[0-9]{1}
?