Sunday, 15 January 2012

quotes - Escape backquote in a double-quoted string in shell -


कमांड के लिए: / usr / bin / sh -c "ls 1`" (1 के बाद का बैकक्वाइट)।

इसे सफलतापूर्वक कैसे चलाने के लिए? "` 'काम नहीं करने से पहले एक बैकस्लैश जोड़ना `एक विशेष वर्ण है जैसा हम जानते हैं, और मैंने इसके आसपास एक बोली के साथ भी प्रयास किया (/ usr / bin / sh -c" ls 1'` '"), लेकिन वह भी काम नहीं करता है।

त्रुटि हमेशा होती है:

 % / usr / bin / sh -c "ls 1 \`" बेमेल ` 

आपको बैकटीक से बचने की ज़रूरत है, लेकिन बैकस्लैश से बचें:

 $ touch1 \ '$ / bin / sh -c "ls 1 \\\ `` 1` 

इसका कारण "दो बार" से बचना है क्योंकि आप इस कमांड को एक पर्यावरण (जैसे कि खोल स्क्रिप्ट) में डाल रहे हैं जो कि डबल-उद्धृत स्ट्रिंग की व्याख्या करता है एक बार।

आप दोहरे उद्धरणों से भी बच सकते हैं, और इस प्रकार पहली व्याख्या से बचें:

 $ / bin / sh -c 'ls 1 \ `'1` 

फ़ाइल नाम किसी चर में संग्रहीत करने का दूसरा तरीका है, और उस मान का उपयोग करें:

 $ export F =' 1` $ $ printenv F 1` $ / bin / Sh -c 'ls $ F' # नोट कि / बिन / श $ एफ की व्याख्या करता है, मेरा वर्तमान शेल 1` नहीं 

और आखिरकार, आपने कुछ गोले पर काम करने की कोशिश की है (मैं बाश का उपयोग कर रहा हूं , जैसा कि ऊपर दिए गए उदाहरणों के लिए), सिर्फ अपने खोल के साथ नहीं:

 $ / bin / sh -c "ls 1 '\' '1` $ csh # csh दर्ज करें, अगली पंक्ति निष्पादित हो जाती है उस वातावरण में% / bin / sh -c "ls 1 '\`' 'बेजोड़' 

मैं दृढ़ता से सुझाव देता हूं कि आप ऐसे फाइलनामों में से बचें।


No comments:

Post a Comment