मेरे प्रश्न के पहले भाग में मैं समुदाय को सेवा के रूप में कुछ पृष्ठभूमि जानकारी प्रदान करूंगा। दूसरे भाग में वास्तविक प्रश्न है।बैकस्लाश एलियास विस्तार को क्यों रोकते हैं?
भाग
मान लें मैं निम्नलिखित उर्फ बना लिया है:
alias ls='ls -r'
मुझे पता है कि अस्थायी रूप से unalias करने (यानी, इस उपनाम को ओवरराइड) का उपयोग निम्नलिखित मायनों में,:
1) कमांड का पूरा पथनाम: /bin/ls
2) आदेश प्रतिस्थापन: $(which ls)
3) आदेश निर्मित: command ls
4) दोहरे उद्धरण चिह्न: "ls"
5) एकल उद्धरण चिह्न: 'ls'
6) एक बैकस्लैश चरित्र: \ls
केस 1 स्पष्ट है और केस 2 बस एक भिन्नता है। 3 मामले में निर्मित कमांड को शैल फ़ंक्शंस को अनदेखा करने के लिए डिज़ाइन किया गया था, लेकिन स्पष्ट रूप से यह उपनामों को रोकने के लिए भी काम करता है। ,
"एक परिणामस्वरूप शब्द है जो की पहचान की है एक साधारण आदेश के आदेश के नाम शब्द की जांच की जाएगी निर्धारित करते हैं कि यह एक गैर उद्धृत है होना करने के लिए: अंत में, मामलों 4 और 5 दोनों POSIX standard (2.3.1) साथ संगत कर रहे मान्य उपनाम नाम। "
और Bash Reference Manual (6.6):
"प्रत्येक सरल आदेश का पहला शब्द, गैर उद्धृत करते हैं, को चेक किया गया है देखें कि क्या वह एक उपनाम है।" क्यों मामला 6 शब्द के हवाले से विचार (
\ls
कह कर उर्फ अधिभावी) है:
भाग द्वितीय
यहाँ सवाल है? इस प्रश्न की शैली को ध्यान में रखते हुए, मैं "आधिकारिक" दस्तावेज के संदर्भों की तलाश में हूं।
प्रलेखन का कहना है कि एक बैकस्लैश केवल निकल जाता चरित्र निम्नलिखित, के रूप में सिंगल और डबल उद्धरण चिह्न है, जो वर्णों की एक अनुक्रम उद्धृत करने का विरोध किया।POSIX standard (2.2.1):
"एक बैकस्लैश कि उद्धृत नहीं किया गया है निम्न वर्ण के वस्तुतः मान की रक्षा करेगा, एक < न्यू लाइन की अपवाद के साथ>"
Bash Reference Manual (3.1.2.1):
"एक गैर-उद्धृत बैकस्लैश '' बैश एस्केप कैरेक्टर है। यह शाब्दिक को संरक्षित करता है अगले वर्ण का मान न्यूलाइन के अपवाद के साथ। "
(Btw, "अगले वर्ण इस प्रकार है कि" overkill का एक सा नहीं है?) एक संभावित जवाब हो सकता है कि इस स्थिति है कि विशेष नहीं है: यह कुछ के समान है एएनएसआई-सी उद्धरण में मामलों, उदाहरण के लिए \nnn
। हालांकि, यह अभी भी से बचने वाला एक एकल वर्ण (आठ-बिट वर्ण जिसका मान ऑक्टल मान एनएनएन है), वर्णों का अनुक्रम नहीं है।
बस ध्यान दें: 6 वें पहले 5 से अलग है: पहला 5 फ़ंक्शन और उपनाम दोनों बाईपास करता है, जबकि '\ ls' (बैश में) केवल उपनाम को बाईपास करता है, न ही उसी नाम का फ़ंक्शन। यानी: 'उपनाम ls =' echo "aliased" '; समारोह ls {echo "फ़ंक्शन"; }; एलएस; \ एलएस; कमांड ls': पहला (एलएस) "एलियाड" दिखाएगा, दूसरा (\ ls) केवल उपनाम को छोड़ देता है और इसलिए "फ़ंक्शन" दिखाता है, और तीसरा (कमांड एलएस) नियमित एलएस –
का आउटपुट दिखाता है यह एक महान है सवाल लेकिन कोई भी स्पष्टीकरण इस मामले पर मेरे किसी भी भ्रम को दूर करने के लिए प्रतीत नहीं होता है। @ alexandros-gezerlis, अगर आप कारण समझने में सक्षम हैं, तो क्या आप इसे मेरे लिए (घर पर लोगों) के लिए वर्तनी कर सकते हैं? – harperville
@OlivierDulac 5 कम से कम जीएनयू बैश में फ़ंक्शन बाईपास नहीं करता है 4.3.11 – jarno