मुझे दो बार "डॉट" से क्यों बचना है?


13

मुझे पता है कि हम जैसे विशेष वर्ण बच सकते हैं *(){}$के साथ \इतनी के रूप में माना जाता शाब्दिक किया जाना है।
उदाहरण के लिए \*या\$

लेकिन अगर .मुझे इसे दो बार करना है, जैसे कि \\.अन्यथा इसे विशेष चरित्र माना जाता है। उदाहरण:

man gcc | grep \\.

ऐसा क्यों है?


क्या आप ऐसा केस दे सकते हैं जिसमें आपको दो बार भागना पड़े?
कोउंगलम

man bash|grep \\.एक उदाहरण हो सकता है।
रजिस्टर्ड यूजर

3
अधिक सटीक रूप से, आप दो बार डॉट से नहीं बचते हैं, आप बच चरित्र से बचते हैं ताकि वह जीआरपी को पारित हो जाए
Cthulhu

5
आप बैकलैश पात्रों से बचने के लिए उद्धरण चिह्नों का उपयोग कर सकते हैं man gcc | grep '\.':।
लियोनिद बेस्चस्टानी

1
मैं दृढ़ता से @ LeonidBeschastny के सुझाव को पसंद करता हूं क्योंकि यह कितना स्पष्ट है कि क्या चल रहा है
इज़काता

जवाबों:


24

आम तौर पर, आपको विशेष चरित्र को शाब्दिक बनाने के लिए केवल एक बार बचना होगा। कभी-कभी आपको इसे दो बार करना पड़ता है, क्योंकि आपके पैटर्न का उपयोग एक से अधिक प्रोग्राम द्वारा किया जाता है।

अपने उदाहरण को भंग करें:

man gcc | grep \\.

इस कमांड की व्याख्या दो कार्यक्रमों, bashदुभाषिया और द्वारा की जाती है grep। पहले भागने का कारण बनता है bashजानता है \तो दूसरे के लिए पारित है, शाब्दिक है grep

यदि आप केवल एक बार बच जाते हैं \., bashतो पता चल जाएगा कि यह डॉट शाब्दिक है, और पास .है grep। जब grepयह देख ., यह सोचता है कि डॉट विशेष वर्ण, शाब्दिक नहीं है.

यदि आप दो बार बचते हैं, bashतो पैटर्न \.को पास करेंगे grep। अब grepजानते हैं कि यह एक शाब्दिक बिंदु है।


: तो, क्या डॉट के लिए भागने का चरित्र हमारे द्वारा उपयोग किए जाने वाले पाइप की संख्या पर निर्भर करता है? उदाहरण के लिए cmd | cmd | cmd | cmd \\\\। क्या वो सही है????
तुशी जुएल

6
@ तुषी: नहीं। इसका इस तथ्य से कोई लेना-देना नहीं है कि आप (या कई) पाइप पात्रों का उपयोग कर रहे हैं, लेकिन इसके लिए भी लागू होता है grep \\. my_file। कमांडलाइन को शेल द्वारा व्याख्या की जाती है, पहले का उपयोग करके \ दूसरे \ को बचाना है , इसलिए एक को शाब्दिक रूप से पास किया जाता है। डॉट .शेल के लिए विशेष नहीं है, इसलिए इसे वैसे भी शब्दशः पास कर दिया जाता है। Grep तब (एकल) को पढ़ता है \ और इसका उपयोग डॉट से बचने के लिए करता है .
अंसार एस्परटरमैन

@AnsgarEsztermann: Yes.That's true.Checked it.hanks :)
तुषी

2
मेरा मानना ​​है कि उत्तर कुछ गलत है जिसमें कहा गया है कि "पहला पलायन बाश जानता है। शाब्दिक है, दूसरा grep है।" दरअसल, पहले भागने से बैश को पता चल जाता है कि \ _ लेटरल है, और पास \ _। पकड़ना
Cululhu

@ मुझे लगता है कि यह नहीं है। echo .बस बकवास में ... गूँजती .चरित्र।
Cululhu
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.