सरल समाधान '
शुरुआत में एक उद्धरण ( ) और अंत में एक अन्य उद्धरण, और '
4-वर्ण अनुक्रम द्वारा फ़ाइल नाम के अंदर प्रत्येक वर्ण को बदलने के लिए है '\''
। सभी वर्ण एकल-उद्धृत स्ट्रिंग के अंदर अपना विशेष अर्थ खो देते हैं, सिवाय इसके '
कि जो स्ट्रिंग के अंत को चिह्नित करता है। अनुक्रम '\''
एकल-उद्धृत शाब्दिक को समाप्त करता है, तुरंत एक उद्धृत एकल उद्धरण द्वारा अनुसरण करता है, और एक नया एकल-उद्धृत शाब्दिक खोलता है। इस प्रकार फ़ाइल का नाम
This file's name has some weird characters!
Will you manage to escape them?
निम्नानुसार उद्धृत किया जा सकता है:
somecommand 'This file'\''s name has some weird characters!
Will you manage to escape them?'
दोहरे उद्धरण-चिह्नों में अधिक जटिल भागने के नियम हैं और !
यदि इतिहास प्रतिस्थापन सक्रिय है तो आपको विस्मयादिबोधक चिह्न शामिल करने की अनुमति नहीं है, इसलिए मैं उन्हें आगे नहीं समझूंगा।
एक वैकल्पिक दृष्टिकोण बैकस्लैश वाले पात्रों की रक्षा करना है। यह नई वर्णमाला को छोड़कर प्रत्येक वर्ण के लिए काम करता है; एक नई पंक्ति के लिए, इसे एकल उद्धरण (या दोहरे उद्धरण) के अंदर रखना एकमात्र उपाय है। यदि आप उपयोगकर्ता को उद्धृत नाम प्रस्तुत करने के लिए बैकस्लैश की संख्या कम से कम करना चाहते हैं, तो आप इसे उन स्थानों पर प्रतिबंधित कर सकते हैं जहाँ बैकस्लैश की आवश्यकता है; हालाँकि, जितने अधिक बैकस्लैश आप छोड़ते हैं, उतने ही अधिक जोखिम को आप भूल जाते हैं। अक्षर, अंक और गैर- ASCII वर्ण हमेशा ठीक हैं। जब भी आप अनिश्चित हों, व्हाट्सएप और विराम चिह्न को उद्धृत करें।
एक विशिष्ट शेल (ksh, bash या zsh) के साथ, आपको कम से कम कुछ परिस्थितियों में निम्नलिखित वर्णों को उद्धृत करना होगा।
- व्हॉट्सएप (स्पेस, टैब, न्यूलाइन - यह याद रखना कि नए सिरे को बैकस्लैश के साथ उद्धृत नहीं किया जा सकता)।
!
- इतिहास विस्तार।
"
- शेल सिंटैक्स।
#
- व्हॉट्सएप से पहले टिप्पणी शुरू करें; zsh वाइल्डकार्ड।
$
- शेल सिंटैक्स।
&
- शेल सिंटैक्स।
'
- शेल सिंटैक्स।
(
- एक शब्द के बीच में भी: ksh विस्तारित ग्लब्स (बाश और zsh में भी उपलब्ध); zsh वाइल्डकार्ड।
)
(देखें (
)
*
- एस वाइल्डकार्ड।
,
- केवल ब्रेस विस्तार के अंदर।
;
- शेल सिंटैक्स।
<
- शेल सिंटैक्स।
=
- zsh में, जब यह एक फ़ाइल नाम (PATH लुकअप के साथ फ़ाइल नाम विस्तार) की शुरुआत में है।
>
- शेल सिंटैक्स।
?
- एस वाइल्डकार्ड।
[
- एस वाइल्डकार्ड।
\
- शेल सिंटैक्स।
]
- आप इसे निर्विघ्न छोड़ने से दूर हो सकते हैं।
^
- इतिहास का विस्तार; zsh वाइल्डकार्ड।
`
- शेल सिंटैक्स।
{
- ब्रेस विस्तार।
|
- शेल सिंटैक्स।
}
- zsh में बच निकलने की जरूरत है, जब कोई मैचिंग ओपनिंग ब्रेस न हो तो अन्य गोले ज्यादा लचकदार होते हैं।
~
- घर निर्देशिका विस्तार जब यह एक फ़ाइल नाम की शुरुआत में है; zsh वाइल्डकार्ड; हमेशा सुरक्षित जब यह अंतिम चरित्र है।
कुछ और पात्रों को कभी-कभी विशेष हैंडलिंग की आवश्यकता हो सकती है:
-
शेल के लिए विशेष नहीं है, लेकिन जब यह कमांड तर्क की शुरुआत में होता है, तो यह एक विकल्प को इंगित करता है। विशेष हैंडलिंग कमांड में नहीं है, इसलिए इसे कोट के साथ संरक्षित नहीं किया जा सकता है, शेल में नहीं। उस फ़ाइल नाम की रक्षा करने के लिए जो इसके साथ शुरू होता है -
, आप इसके आगे रख सकते हैं ./
- इस तरह यह अभी भी एक ही फ़ाइल है, लेकिन तर्क -
अब और नहीं शुरू होता है ।
.
अपने आप में विशेष नहीं है, लेकिन *
डिफ़ॉल्ट रूप से डॉट फ़ाइलों को ग्लब्स से बाहर रखा गया है।
:
शेल के लिए विशेष नहीं है, लेकिन कुछ कमांड इसे विशेष रूप से पार्स करते हैं, उदाहरण के लिए एक दूरस्थ फ़ाइल ( hostname:filename
)। कॉलन वाले फ़ाइल नाम से निपटने के तरीके को देखने के लिए कमांड के प्रलेखन से परामर्श करें।
¹ जब तक उपयोगकर्ता को कॉन्फ़िगर किया वैकल्पिक इतिहास विस्तार अक्षर। कुछ गोले इसकी अनुमति देते हैं। यह बैकस्लैश के बजाय एकल उद्धरण का उपयोग करने का एक और कारण है।