2012-06-25 12 views
311

में न्यू लाइन के बिना मैं अपने लिपि में echo साथ एक समस्या है:'गूंज' एक खोल स्क्रिप्ट

echo -n "Some string..." 

प्रिंट

-n Some string... 

और अगली पंक्ति में ले जाता है। कंसोल में यह न्यू लाइन के बिना correcly काम कर रहा है:

Some string... 
+2

आप किस बोर्न खोल कार्यान्वयन का उपयोग कर रहे हैं? यदि मैं बोर्न शेल मोड में 'बाश' चलाता हूं, तो यह ठीक काम करता है। इसके अलावा, यह कुछ हद तक असंभव है कि आप वास्तव में एक बोर्न शेल का उपयोग अपने इंटरैक्टिव खोल के रूप में कर रहे हैं, नहीं? उबंटू पर – FatalError

+3

: नई लाइन के बिना 'echo -ne "टेक्स्ट:"; "कुछ पाठ" गूंजें; ' – zsoltii

उत्तर

334

echo आदेश के कई संस्करण, अलग अलग व्यवहार के साथ कर रहे हैं। जाहिर है कि आपकी स्क्रिप्ट के लिए उपयोग किया जाने वाला खोल एक ऐसे संस्करण का उपयोग करता है जो -n को पहचानता नहीं है।

printf कमांड में अधिक लगातार व्यवहार है। echoecho hello जैसी साधारण चीज़ों के लिए ठीक है, लेकिन मैं कुछ भी जटिल के लिए printf का उपयोग करने का सुझाव देता हूं।

आप किस प्रणाली पर हैं, और आपकी स्क्रिप्ट किस शैल का उपयोग करती है?

+34

लाइन' #!/bin/bash' से शुरू करके यह काम करता है। आम तौर पर मैं बैश के साथ काम कर रहा हूँ। – qwertz

+0

मेरी इच्छा है कि सीएमडी में विंडोज़ समकक्ष था :(जहां तक ​​मैं देख सकता हूं, वही व्यवहार प्राप्त करने के लिए केवल कामकाज नहीं है। –

+2

@kayleeFrye_onDeck: शायद 'printf' कमांड का एक विंडोज संस्करण है। –

51

प्रयास करें

echo -e "Some string...\c" 

साथ यह मेरे लिए काम करता है के रूप में उम्मीद (के रूप में मैं अपने प्रश्न से समझा)।

ध्यान दें कि मुझे यह जानकारी man पृष्ठ से मिली है। man पृष्ठ यह भी नोट करता है कि खोल में echo का अपना संस्करण हो सकता है, और मुझे यकीन नहीं है कि bash का अपना संस्करण है या नहीं।

+0

+1 मुझे सही दिशा में संकेत देने के लिए +1, हालांकि गूंज जो पहचान नहीं पाता है- कोई विकल्प संभवत: पहचान नहीं करता है (न ही आवश्यकता है) विकल्प तो आप शायद कुछ स्ट्रिंग 'echo' कहना चाहते हैं ... \ c "इसके बजाए। यदि आपको जंगली रूप से भिन्न इको कमांड के साथ कई बैश वेरिएंट का समर्थन करने की आवश्यकता है, तो संभवतः आप printf का उपयोग करने के बेहतर हैं या आपको '[-n "$ (echo -e)"] और echo जैसे कुछ के साथ इको कमांड क्षमताओं की जांच करने की आवश्यकता है " श सामान \ सी "|| echo -e "bash stuff \ c" '(कम से कम बैश का समर्थन करता है \ c भी, इसलिए -n विकल्प का उपयोग करने की आवश्यकता नहीं है, लेकिन आपको बैश के लिए -e की आवश्यकता है) – Timo

+0

\ c धन्यवाद .. –

78

bash एक "निर्मित" कमांड "गूंज" कहा जाता है:

$ type echo 
echo is a shell builtin 

इसके अतिरिक्त, वहाँ एक "गूंज" कमांड एक उचित निष्पादन योग्य (जो है है, खोल कांटे और अधिकारियों /bin/echo, के रूप में echo की व्याख्या और यह क्रियान्वित करने) करने का विरोध किया:

$ ls -l /bin/echo 
-rwxr-xr-x 1 root root 22856 Jul 21 2011 /bin/echo 

\c और -n के लिए या तो echo के WRT के व्यवहार बदलता रहता है।

$ printf "a line without trailing linefeed" 
$ printf "a line with trailing linefeed\n" 
+2

के लिए धन्यवाद गहराई से जवाब में बड़े पैमाने पर! – Fuser97381

0

आप एक अंदर गूंज का उपयोग अन्य आदेशों के साथ करते हैं, "पढ़ें" की तरह, यह सेटिंग को अनदेखा कर सकता है: आपका सर्वश्रेष्ठ दांव printf है, जो चार अलग अलग * NIX जायके कि मैं को देखा पर उपलब्ध है उपयोग करने के लिए है और यह वैसे भी एक नई लाइन पर कूद जाएगा।

 संबंधित मुद्दे

  • कोई संबंधित समस्या नहीं^_^