2013-02-21 68 views
5

मैं शाब्दिक स्ट्रिंग के लिए ack करना चाहते हैं: एक कोड बेस में "$$" है, लेकिन इस तरह डॉलर साइन भागने:मैं एके का उपयोग कर एक डॉलर के संकेत के लिए कैसे बच सकता हूं?

ack \$\$ 

काम नहीं करता।

+3

'एके '[$] [$]''। चरित्र वर्ग एन से बचने से क्लीनर। –

उत्तर

15

आप उलझन में हो रही है खोल उद्धरण द्वारा। जब आप टाइप करें:

ack "\\\$\\\$\(" 

खोल डबल उद्धृत स्ट्रिंग ताकि \\\ लिए अनुवाद किया है interpolates, \$$ लिए अनुवाद किया है और \(\( लिए अनुवाद किया है और पावती अपने तर्क के रूप में स्ट्रिंग \$\$\( हो जाता है।

ack '\$\$\(' 

echo साथ ack बदलें कैसे खोल तार विस्तार हो रहा है पता लगाने के लिए: यह एकल उद्धरण का उपयोग करके खोल प्रक्षेप से बचने और आह्वान करने के लिए बहुत सरल है। ध्यान दें कि

ack "\\$\\$\(" 

भी काम करेगा, लेकिन कुछ अलग कारणों से। यहां, पहले दो \ को एक एकल (बच निकला) \ के रूप में माना जाता है, तो $ को $ के रूप में अनुवादित किया गया है क्योंकि इसके बाद एक वर्ण होता है जो चर नाम में मान्य वर्ण नहीं है। \(( के बजाय \( तक फैला है क्योंकि ( इंटरपोलेशन के अधीन नहीं है और इसलिए इसे बचने की आवश्यकता नहीं है। लेकिन ध्यान दें कि डबल कोट्स के बाहर, \( को ( में परिवर्तित किया गया है।

शैल उद्धरण नियम कभी-कभी भ्रमित हो जाते हैं!

+1

हाँ मैं आसानी से खोल उद्धरण नियमों से भ्रमित हो जाता हूं - गूंज चाल एक है हालांकि महान विचार, –

0

आप तीन बैकस्लैश के साथ डॉलर साइन चरित्र बच सकते हैं, इस तरह:

ack "\\\$\\\$" 

या एकल उद्धरण का उपयोग करें, जहाँ आप केवल एक बार यह से बचने के लिए है:

ack '\$\$' 
+3

सिंगल कोट्स का उपयोग करना बहुत आसान है: 'ack' \ $ \ $ \ ('' ठीक काम करना चाहिए। –

+0

यूप, यह बहुत बेहतर है - धन्यवाद! –

0

%q प्रारूप विनिर्देशक का उपयोग कर आप के लिए उद्धरण का ख्याल रखने के लिए आप printf का उपयोग कर सकते हैं।

$ printf %q '$$(' 
\$\$\(

help print

%q quote the argument in a way that can be reused as shell input 
15

उपयोग पावती के -Q अपने एस्केपिंग करने के लिए (यहाँ मैं यह सोचते हैं रहा हूँ बैश) कहने के लिए निम्नलिखित है `।

ack -Q '$$' 
+0

साझा करने के लिए धन्यवाद बहुत बढ़िया, धन्यवाद! – blushrt