हालत regex त्रुटि


14
string=123456

if [ $string == 123456 ]; then
echo 123
fi

यह ठीक काम करता है, लेकिन अगर मैं == से = ~ में बदलता हूं तो मुझे यह त्रुटि मिलती है:

./test: line 3: [: =~: binary operator expected

=~इस मामले में उपयोग गलत है। आत्मसात के दाईं ओर =~एक नियमित regexअभिव्यक्ति के साथ संरक्षक (असाइनमेंट के बाईं ओर) की तुलना करता है। इसके सबसे सरल रूप में एक नियमित अभिव्यक्ति दी जाती है जैसे'[0-9][0-9]'
वैलेंटाइन बजरमी

9
@ val0x00ff लेकिन 123456
रोएमा

@roaima ने सहमति व्यक्त की, हालांकि रेगेक्स अपने इंजन, बैक-रेफ़रिंग, कैरेक्टर-सेट, मेटा चार्ज़ के लिए जाना जाता है, जिसमें स्ट्रिंग शुरू करना, स्ट्रिंग समाप्त होना आदि शामिल हैं
वैलेंटाइन बजरमी

जवाबों:


29

बैश के रेगेक्स मिलान केवल दोहरे वर्ग कोष्ठक के भीतर काम करता है[[ ... ]]:

string=123456
if [[ "$string" =~ 123456 ]]; then echo 123; fi
123

@ कुसलानंद: संपादन के बारे में, दोहरे ब्रैकेट अभिव्यक्ति के बाईं ओर उद्धरण आवश्यक नहीं हैं [[ ... ]], क्योंकि कोई शब्द विभाजन या पथनाम विस्तार नहीं होता है। उन्हें केवल एकल ब्रैकेट [ ... ](दोनों तरफ) और डबल ब्रैकेट अभिव्यक्ति के दाहिने हाथ का उपयोग करते समय आवश्यक है ।
user000001

@ user000001 जब आप सही होते हैं, तब तक रिफ्लेक्स द्वारा सभी वेरिएबल्स को उद्धृत करना बेहतर होता है जब तक कि आवश्यकता न हो। यह ज्यादा सुरक्षित आदत है।
जो

@ जो: सहमत, जब संदेह में, बोली ... मैंने केवल इसका उल्लेख किया है क्योंकि यह पहले से ही सही उत्तर के लिए एक संपादन था। अगर यह पहले संशोधन से होता तो मैं इस पर टिप्पणी नहीं करता।
user000001
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.