कैसे बताएं कि अगली पंक्ति पर लाइन जारी है


99

एक बाश स्क्रिप्ट में मुझे दूसरे प्रोग्रामर से मिला, कुछ पंक्तियों की लंबाई 80 कॉलम से अधिक थी। यह दर्शाने के लिए कि लाइन को अगली लाइन पर जारी रखने के लिए लाइन में किस वर्ण या चीज़ को जोड़ा जाना है?


पर अतिरिक्त चर्चा देखें stackoverflow.com/questions/18599711/...
enharmonic

जवाबों:


127

चरित्र एक बैकस्लैश है \

से बैश मैनुअल :

बैकस्लैश चरित्र '\' का उपयोग अगले वर्ण पढ़ने के लिए और लाइन निरंतरता के लिए कोई विशेष अर्थ निकालने के लिए किया जा सकता है।


धन्यवाद। और बैश स्क्रिप्ट के कॉलम में सामान्य सीमा क्या है?
का रास्ता खोलें

बैश की कोई दिलचस्प स्तंभ सीमा नहीं है; स्पष्टता के लिए आपको प्रति कॉलम 70-80 वर्णों तक सीमित करने का प्रयास करना चाहिए।
हबी

9
@RMM लाइन कैरेक्टर के अंत से पहले बैकस्लैश को बहुत अंतिम चरित्र होना चाहिए। क्या आप सुनिश्चित हैं कि आपके पास \ _ के बाद कोई व्हाट्सएप नहीं है?
जॉर्ज

9
@ जी हाँ। एक छोटे से अधिक fiddling थूक के साथ एक त्रुटि ^M। समस्या यह प्रतीत होती है कि स्क्रिप्ट मुझे किसी ऐसे व्यक्ति द्वारा दी गई थी जो विंडोज़ का उपयोग करता है। एक त्वरित dos2unixतय :) :)
रयानएम

2
@ आपकी टिप्पणी ने मुझे बचा लिया, मेरे पास \ _ के बाद एक स्थान था और मैं यह पता नहीं लगा सका कि क्या गलत था। चीयर्स!
ffledgling

37

सामान्य तौर पर, आप अगली पंक्ति को जारी रखने के लिए आदेश के लिए एक पंक्ति के अंत में बैकस्लैश का उपयोग कर सकते हैं। हालाँकि, ऐसे मामले हैं जहाँ आदेशों को स्पष्ट रूप से जारी रखा जाता है, अर्थात् जब लाइन टोकन के साथ समाप्त होती है, तो कानूनी रूप से एक कमांड को समाप्त नहीं कर सकती है। उस स्थिति में, शेल जानता है कि अधिक आ रहा है, और बैकस्लैश को छोड़ा जा सकता है। कुछ उदाहरण:

# In general
$ echo "foo" \
> "bar"
foo bar

# Pipes
$ echo foo |
> cat
foo

# && and ||
$ echo foo &&
> echo bar
foo
bar
$ false ||
> echo bar
bar

अलग, लेकिन संबंधित, उद्धरण के अंदर निहित निरंतरता है। इस मामले में, बैकस्लैश के बिना , आप बस स्ट्रिंग में एक नई रेखा जोड़ रहे हैं।

$ x="foo
> bar"
$ echo "$x"
foo
bar

एक बैकस्लैश के साथ , आप फिर से लॉजिकल लाइन को कई लॉजिकल लाइन में विभाजित कर रहे हैं।

$ x="foo\
> bar"
$ echo "$x"
foobar

क्या ऐसी स्थितियों की एक औपचारिक सूची है, जहां अगली पंक्ति में एक कमांड निहित है? ऐसा नहीं है कि मैं एक के भीतर कुछ निश्चित परिस्थितियों में बाहर बैकस्लैश छोड़ सकता मुझे लगता है [[- ]]हालत, लेकिन दूसरों में नहीं है, और मैं बाहर नियम आंकड़ा करने की कोशिश कर रहा हूँ।
मेनकेम

16

\नौकरी करता है। @ गिलियूम का जवाब और @ जॉर्ज की टिप्पणी स्पष्ट रूप से इस सवाल का जवाब देती है। यहाँ मैं समझाता हूँ कि The backslash has to be the very last character before the end of line character.इस आदेश पर विचार क्यों करें:

   mysql -uroot \
   -hlocalhost      

यदि के बाद एक स्थान है \, तो लाइन निरंतरता काम नहीं करेगी। कारण यह है कि \ अगले वर्ण के लिए विशेष अर्थ को हटा देता है जो कि एक स्थान है जो अदृश्य रेखा फ़ीड वर्ण नहीं है। लाइन फ़ीड वर्ण \इस उदाहरण में स्थान नहीं होने के बाद है ।


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