2013-06-03 6 views
11

एस्केप कैरेक्टर (\) लाइन के अंत से बचने के लिए इस्तेमाल किया जा सकता है, उदाहरण के लिएलाइन का अंत (नई लाइन) बैश

% echo This could be \ 
a very \ 
long line\! 
This could be a very long line! 
% 

हालांकि, रेखा (नई लाइन) \n जो दो कैरेक्टर हैं द्वारा प्रतिनिधित्व के अंत नहीं है। भागने का नतीजा \n का शाब्दिक होना चाहिए। जैसे

%echo $'\\n' 
\n 
% 

आपके उत्तर के लिए धन्यवाद!

संपादित करें: क्षमा करें, मैंने इसे काफी समझाया नहीं है। मैं एक नई लाइन गूंजने की कोशिश नहीं कर रहा हूँ। मैं सोच रहा हूं कि क्यों \ नए लाइन वर्ण (\n) में सक्षम है जिसमें नए चरित्र चरित्र में बैकस्लैश से बचने के बजाय दो अक्षर हैं और \ n

+0

http://www.gnu.org/software/bash/manual/bashref.html#ANSI_002dC- QUoting –

+8

हम्म, अभी भी सुनिश्चित नहीं है कि मैं आपका प्रश्न समझता हूं। शायद यह जानने में मदद मिलेगी कि \ n' _really_ एक न्यूलाइन चरित्र नहीं है - यह एक बचपन अनुक्रम है जो _represent_ एक नई लाइन (जो कि लिनक्स में केवल एक वर्ण है)। एक पंक्ति के अंत में '\' _actual_ newline वर्ण से निकलता है जिसे आप 'एंटर' कुंजी का उपयोग करके टाइप करते हैं। –

+0

@ मार्ककुक, धन्यवाद! यह वास्तव में मेरे प्रश्न का उत्तर देता है। मैंने हमेशा सोचा कि \ n' नया लाइन चरित्र स्वयं है। यही कारण है कि मुझे समझ में नहीं आता कि बैकस्लैश दो पात्रों से क्यों बच सकता है। खराब phrasing के बारे में खेद है। – Yoland

उत्तर

16

वास्तव में, \n एक नई पंक्ति चरित्र नहीं वास्तव में है - यह एक एस्केप अनुक्रम है कि एक नई पंक्ति (जो लिनक्स में सिर्फ एक चरित्र है) का प्रतिनिधित्व करता है। एक लाइन के अंत में \वास्तविक न्यूलाइन वर्ण से निकलता है जिसे आप एंटर कुंजी का उपयोग करते हुए टाइप करते हैं। आप क्या ASCII मूल्यों hexdump का उपयोग कर विभिन्न पात्रों का प्रतिनिधित्व करते देख सकते हैं:

%echo $'\\n' 
\n 
%echo $'\\n' | hexdump -C 
00000000 5c 6e 0a     |\n.| 
00000003 

आप देखेंगे कि गूंज मुद्रित 3 अक्षरों: \ (5c), n (6e), और एक नई पंक्ति (0A)। आप यह भी देखेंगे कि हेक्सडंप आउटपुट के दाईं ओर, नई लाइन "।" के रूप में दिखाई देती है, क्योंकि इसे non-printing character माना जाता है।

1

न्यूलाइन का नाम यूनिक्स दुनिया में दिया गया नाम है एक वर्ण जो रेखा-उन्मुख फ़ाइल (या टर्मिनल में) में एक पंक्ति को समाप्त करता है। यूनिक्स/लिनक्स दुनिया में यह एएससीआईआई लाइनफीड चरित्र से मेल खाता है।

विभिन्न सिस्टम लाइनों को समाप्त करने के लिए विभिन्न सम्मेलनों का उपयोग करते हैं: विंडोज कैरिज रिटर्न और लाइन फीड का अनुक्रम का उपयोग करता है, जबकि मैक मूल रूप से एक सिंगल कैरिज रिटर्न का उपयोग करता है। यह भ्रम इस तथ्य से उत्पन्न होता है कि प्रिंटर के प्रिंट हेड को एक नई लाइन की शुरुआत में स्थानांतरित करने के लिए मूल रूप से आवश्यक आदेश थे।

\n कोड में लाइन वर्ण के अंत को अभिव्यक्त करने का एक पारंपरिक तरीका है, मूल रूप से यूनिक्स दुनिया में, मूल रूप से सी भाषा में। ध्यान दें कि एक पाठ फ़ाइल पढ़ते समय सी सिस्टम पर भी एक एकल न्यूलाइन चरित्र पढ़ता है जहां यह वास्तव में दो वर्ण अनुक्रम है।

+0

यूनिक्स में यदि कोई नई लाइन 2 वर्ण है, सी (या अधिक सटीक रूप से फ़्रेड) 2 वर्ण पढ़ता है। विंडोज़ पर, यदि फ़ाइल फ़ाइल के रूप में फ़ाइल खोला जाता है, तो लाइब्रेरी \ r \ n अनुक्रम \ n को परिवर्तित कर देगी। अन्यथा विंडोज 2 अक्षरों पर भी पढ़ा जाएगा। – martinkunev

+0

यूनिक्स न्यूलाइन में परिभाषा के अनुसार एक चरित्र है और यह एएससीआईआई लाइनफीड या अन्य चरित्र सेट में इसके संवाददाता है। यह सच है कि लाइनफीड और कैरिज रिटर्न के अनुक्रम पढ़े जाते हैं, अनुवाद के बिना। –