आप बैकटिक से बचने के लिए, लेकिन यह भी बैकस्लैश से बचने की जरूरत है आपको इसे "दो बार" से बचाना है क्योंकि आप इस कमांड को पर्यावरण में दर्ज कर रहे हैं (जैसे शेल स्क्रिप्ट) था टी एक बार डबल उद्धृत स्ट्रिंग का अर्थ है। फिर इसे सबहेल द्वारा फिर से व्याख्या किया जाता है।
तुम भी डबल उद्धरण से बच सकते हैं, और इस तरह पहली व्याख्या से बचने:
$ /bin/sh -c 'ls 1\`'
1`
एक और तरीका है एक चर में फ़ाइल नाम स्टोर करने के लिए, और प्रयोग है कि मूल्य है:
$ export F='1`'
$ printenv F
1`
$ /bin/sh -c 'ls $F' # note that /bin/sh interprets $F, not my current shell
1`
और आखिरकार, आपने जो कुछ भी किया है, वह कुछ गोले पर काम करेगा (मैं उपरोक्त उदाहरणों के लिए बैश का उपयोग कर रहा हूं), जाहिर है कि आपके खोल के साथ नहीं:
$ /bin/sh -c "ls 1'\`'"
1`
$ csh # enter csh, the next line is executed in that environment
% /bin/sh -c "ls 1'\`'"
Unmatched `.
मैं दृढ़ता से सुझाव देता हूं कि आप first place में ऐसे फ़ाइल नामों से बचें।
स्रोत
2010-02-22 10:37:55
क्या आपके पास एक बैकटिक है? '1 \' 'एक फ़ाइल नाम है? –
हां, असल में मैं कमांड "टच 1'" जारी करके "1'" नाम की एक फाइल बना सकता हूं, लेकिन खोल सिर्फ डबल कोट्स के अंदर पार्स नहीं कर सकता –