टर्मिनल कमांड में "" "(एपोस्ट्रोफ) का अर्थ


11

कुछ अजीब कारण के लिए, मैंने पहचानकर्ताओं में शब्द विभाजक के रूप में "" की कोशिश की, जैसे:

$ export foo'bar=1
> 
> ^C
$ 

परिणाम जैसा कि ऊपर दिखाया गया है, आईडी इस्ट प्रॉम्प्ट को ">" में बदल देता है और सिस्टम स्पष्ट रूप से मेरी ओर से अधिक जानकारी की प्रतीक्षा करता है। जैसा कि आप देख रहे हैं, मुझे बचने के लिए ctrl-C करना पड़ा। ऐसा ही अन्य आदेशों का उपयोग करते हुए भी होता है

$ ls foo'bar
$ mkdir foo'bar

मुझे इस सब के बारे में जानने की उत्सुकता है, कि टर्मिनल कमांड में "" का विशेष अर्थ क्या है (इसलिए वास्तव में यह विशेष रूप से आईडी के अंदर भी लिया जाता है)।

अतिरिक्त: एक तरफ के रूप में मैं फ़ाइल और फ़ोल्डर नामों में विशेष या अन्यथा अमान्य वर्णों के सेट को भी जानना चाहूंगा, दोनों यूनिक्स-जैसे और विंडोज सिस्टम के तहत (सुरक्षित लोगों का सामान्य सबसेट प्राप्त करने के लिए) (विशेष रूप से, सभी के बारे में क्या गैर- ASCII?)।

धन्यवाद, डेनिस


लिनक्स की दुनिया में, \ 0 (null) और / को छोड़कर सभी वर्णों को अनुमति है। हालांकि, इसका मतलब यह नहीं है कि वे सभी उचित हैं। बहुत से लोग उन पात्रों से बचना सबसे अच्छा मानते हैं जिनका खोल का एक विशेष अर्थ है। यदि आप विंडोज के बारे में जानना चाहते हैं, तो विंडोज संदर्भ देखें।
स्कॉट सेवन्स

जवाबों:


15

जब भी किसी शेल कमांड में इस्तेमाल किया जाता है तो 'चरित्र एक बहुत शक्तिशाली चरित्र होता है। मूल रूप से '(एपोस्ट्रोफ निशान) सभी प्रकार के परिवर्तनों या संशोधनों को निष्क्रिय कर देता है। यह विचार करेगा कि जो कुछ भी 'एकल इकाई के रूप में' अर्थात एकल पैरामीटर के साथ संलग्न है। पूरी तरह से किसी प्रकार का प्रतिस्थापन या विस्तार नहीं होगा।

उदाहरण:

 $ echo '$HOME'

उत्पादन में स्ट्रिंग $HOMEही उत्पादन होगा और अपने घर निर्देशिका के लिए मार्ग प्रिंट नहीं होगा। चूंकि एकल उद्धरण किसी भी प्रकार के विस्तार को रोकता है, प्रतिस्थापन और सरल विचार करता है जो कुछ भी अपने आप में एक साधारण पैरामीटर के रूप में मौजूद है।

यदि आप एपोस्ट्रोप का उपयोग करना चाहते हैं, तो आपको इससे बचना होगा:

 $ mkdir foo\'bar

 $ cd foo\'bar

यदि यह बच नहीं जाता है, तो यह जोड़ी के बंद होने की प्रतीक्षा करेगा, जैसे यह आपके पहले उदाहरण में हुआ था।

तो, सुधारा गया, आपकी आज्ञा होगी:

 $ export foo\'bar=1

नोट: जैसा कि मिलान टोडोरोविक ने देखा, यह मान्य नहीं होगा, क्योंकि आप इस मामले में एपोस्ट्रोफ का उपयोग नहीं कर सकते हैं।


1
@ denis63 कृपया जवाब स्वीकार करें अगर यह वही है जो आपको देखने की जरूरत है :)
रिनजविंड

7

चरित्र 'एक विशेष चरित्र है। आप इसे कमांड लाइन प्रविष्टि के भाग को चिह्नित करने के लिए उपयोग करते हैं जिसे बदला नहीं जाएगा (जैसे वाइल्डकार्ड के लिए कोई प्रतिस्थापन नहीं)। उदाहरण के लिए:

$ ls 'bla*'
ls: cannot access bla*: No such file or directory

के लिए यह तर्क का मतलब है कि lsथा bla*सब कुछ है कि के साथ शुरू होता है और नहीं bla

आपके द्वारा >वर्ण प्राप्त करने का कारण यह है कि आप को 'खोलने के लिए एक का उपयोग करना होगा और एक 'को बंद करने वाले भाग के लिए जिसे बदलना नहीं होगा।

यदि आप 'फ़ोल्डर नामों में उपयोग करना चाहते हैं, तो आपको इसे इस तरह से बचना चाहिए \':। इसलिए अगर आप नाम के फोल्डर को सूचीबद्ध करना चाहते हैं तो आपको foo'barटाइप करना चाहिए ls foo\'bar

ओह, और मुझे यकीन नहीं है कि यह 'पर्यावरण चर नामों में उपयोग करना संभव है । मुझे लगता है कि आप उपयोग नहीं कर सकते export foo\'bar=1,

उम्मीद है की यह मदद करेगा।


पर्यावरण चर नाम प्रतिबंध के बारे में आपके अवलोकन के लिए अद्यतन।
१५

अभी तक उत्थान नहीं किया जा सकता (नए से पूछना)। Env var नामों के बारे में जांचा गया, यह वैसा ही है जैसा आप कहते हैं। (मुझे लगता है कि खुद को सीमांकित / खोलने या बंद करने के बारे में नहीं सोचा था, लेकिन मुझे लगता है कि "" "वास्तविक अपोस्टोफे के रूप में माना जाता है, एकल-उद्धरण नहीं)। डेनिस
63
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.