कैसे एक नई लाइन जारी किए बिना "एन" प्रिंट करने के लिए?


16

मैं कमांड -nका उपयोग करके प्रिंट करने की कोशिश कर रहा हूं echo। लेकिन अगर मैं केवल टाइप करता हूं echo -n, तो यह केवल एक नई लाइन जारी करता है, न कि दिखाता है -n, इसके बजाय यह एक नई लाइन जारी करता है।


echo -n -- -nकाम करता है (परीक्षण के लिए कोई लिनक्स बॉक्स काम नहीं है)?
n0rd

मैं एक आभासी मशीन में उबंटू स्थापित कर रहा हूं और यह बहुत धीमा प्रतीत होता है, रुको।
स्टार ओएस

1
मैंने जाँच की है - यह नहीं है। संभवतः क्योंकि यह आंतरिक बैश कमांड है और यह getoptकमांड लाइन को पार्स करने के लिए (???) का उपयोग नहीं कर रहा है
n0rd

1
इस प्रश्न को pubs.opengroup.org/onlinepubs/9699919799/utilities/echo.html में पूछा और उत्तर दिया गया है - "अनुप्रयोगों का सुधार करना ... संभवतः एक-एन को प्रतिध्वनित करने की उम्मीद कर सकता है, जिसे नौवीं से प्राप्त प्रिंट उपयोगिता का उपयोग करना चाहिए। संस्करण प्रणाली "
ब्रैंडिन नोव

पहला लोकप्रिय प्रश्न मैंने बनाया है। वाह?
स्टार ओएस

जवाबों:


28

समस्या यह है कि एक तर्क echoके -nरूप में व्याख्या करता है। डिफ़ॉल्ट बैश कार्यान्वयन पर, इसका मतलब है (से help echo):

  -n  do not append a newline

उस के आसपास होने के विभिन्न तरीके हैं:

  1. इसे किसी अन्य चरित्र को शामिल करके एक विकल्प नहीं है। उदाहरण के लिए, के echoसाथ एक नई प्रिंट न करने के लिए कहें -n, फिर इसे बताएं कि बैकस्लैश से बचने के लिए -eऔर नई लाइन को स्पष्ट रूप से जोड़ दें।

    $ echo -ne '-n\n'
    -n
  2. वैकल्पिक रूप से, बस एक स्थान शामिल करें

    $ echo " -n"
     -n

    हालाँकि, एक ऐसा स्थान जोड़ता है जो आप शायद नहीं चाहते हैं।

  3. इसके पहले नॉन-प्रिंटिंग कैरेक्टर का इस्तेमाल करें। यहाँ। मैं बैकस्पेस का उपयोग कर रहा हूँ ( \b)

    $ echo -e "\b-n"
    -n

    यह एक अतिरिक्त चरित्र भी जोड़ता है जो आप शायद नहीं चाहते हैं।

  4. प्रवंचना का प्रयोग करें

    $ echo n- | rev
    -n

    revआदेश बस प्रिंट इसके उत्पादन को उलट दिया।

  5. नौकरी के लिए सही उपकरण का उपयोग करें

    $ printf -- '-n\n'
    -n

आप सही हैं कि कोई भी 'वैध चरित्र' करेगा।
पायलट 6

@ Pilot6 हाँ, लेकिन उस दृष्टिकोण (आपकी और मेरी) के साथ समस्या यह है कि यह एक अतिरिक्त चरित्र जोड़ता है। यह लाइन के नीचे समस्याएँ पैदा कर सकता है। विशेष रूप से यदि आप तब इसे पार्स करना चाहते हैं और कुछ ऐसा प्रयास करना चाहते हैं grep '^-n'pritnfवास्तव में जाने का रास्ता है।
टेराडो

खैर, printfवैसे भी बेहतर है, लेकिन सवाल बस के बारे में है echo
पायलट 6

2
ऐसा लगता echo -e "-n\c"है कि सटीक काम करता है।
पायलट 6

1
\cआगे उत्पादन को दबा रहा है
Pilot6

15

कभी-कभी सही उपकरण का उपयोग करना एक अच्छा विचार है। आप printfइसके बजाय उपयोग कर सकते हैं :

% printf "-n\n"       
-n


यह पोर्टेबिलिटी के लिए एक पसंदीदा विचार है
सर्गी कोलोडाज़नी

7

आप इस कमांड का उपयोग कर सकते हैं, लेकिन यह एक अतिरिक्त स्थान जोड़ता है।

echo -e  "\r-n"

यह एक तरह का हैक है।

-e बैकलैश कमांड सिंबल को सक्षम करता है।

\r एक गाड़ी वापसी है।

वास्तव में कोई भी \वैध चरित्र स्ट्रिंग के किसी भी स्थान पर करेगा।

आप देख सकते हैं कि कौन से मान्य हैं help echo

echo "-n"के -nलिए एक पैरामीटर के रूप में प्रयोग किया जाता है क्योंकि काम नहीं करता है echo

PS सबसे अच्छा समाधान IMHO है

echo -e "-n\c"

इसमें कोई अतिरिक्त वर्ण नहीं है

echo -e "-n\n"

प्रिंट करता है, लेकिन एक नई लाइन चार के साथ।


1
Wov! यह मुझसे बेहतर है; क्या आप "शुरुआती" के लिए थोड़ा व्याख्या कर सकते हैं ;-)
सादी

धन्यवाद, मैंने यह भी देखा है कि यह कोई फर्क नहीं पड़ता कि आप शुरुआत या अंत में गाड़ी वापसी कहां जोड़ते हैं।
सादी

@ सादी हाँ, ऐसा इसलिए है क्योंकि कुछ भी जोड़ने से यह एक गैर-वैध विकल्प बन जाता है। -nवैध है, -nfooऐसा नहीं है कि मुद्रित किया जाएगा।
टेराडॉन

@terdon के man echoपास भी है। लेकिन helpथोड़ा बेहतर है।
पायलट 6

मुझे पता है कि यह इसके पास है, यह प्रासंगिक नहीं है। /bin/echoएक पूरी तरह से अलग चीज है और जब आप echoबैश में दौड़ते हैं , तो आपको बिलिन मिलता है जो आपके शेल के आधार पर काफी भिन्न हो सकता है।
टेराडो

5

मुझे लगता है कि यदि आप निश्चित रूप से echoकेवल उपयोग करना चाहते हैं , तो इससे आपको संतुष्ट होना चाहिए:

echo "-n "

यह काम करता है क्योंकि इसके -nलिए एक वैध विकल्प है echo, -nएक जगह के बाद यह नहीं है। चूंकि यह एक विकल्प नहीं है, echoबस इसे प्रिंट करता है।


यहां अधिकांश दर्शक केवल "-n" चाहते हैं, "-n" नहीं।
स्टार ओएस

5

आप लोग वास्तव में इसे उखाड़ फेंक रहे हैं।

 echo -e \\055n

या कोई अनुगामी न्यूलाइन नहीं है

 echo -en \\055n

printf "-n\n" ओवरटेक कैसे होता है ?
दिमित्री ग्रिगोरीव

हाँ, मैंने इस तरह से उत्तर दिया। मेरे उत्तर को हटा देगा। यह अपेक्षाकृत पोर्टेबल है कि यह बिल्ट-इन इको के साथ काम करता है और /bin/echoकम से कम अगर आह्वान किया जाता हैecho -e "\055n"
abligh

-ऐसा नहीं है कि मैं क्या चाहता हूं।
स्टार ओएस

2

@ एबी के उत्तर का विस्तार करने के लिए, उपयोग करने का एकमात्र पोर्टेबल तरीका echoकिसी भी विकल्प का उपयोग करने से बचना है -nprintfजहाँ उपलब्ध हो, उसके बजाय उपयोग पर विचार करें । इस संदर्भ पेज अधिक विवरण प्रदान करता है और बहुत अच्छी तरह से कब और कैसे बताते हैं echoऔर printfइस्तेमाल किया जाना चाहिए:

आजकल, इको (1) केवल पोर्टेबल है यदि आप झंडे को छोड़ते हैं और अनुक्रम से बचते हैं। यदि आपको सादे पाठ से अधिक की आवश्यकता है, तो इसके बजाय प्रिंटफ (1) का उपयोग करें।


मैं एक उत्तर देने जा रहा हूँ, कृपया उत्तर संपादित करें।
स्टार ओएस

मुझे यकीन नहीं है कि किसी अन्य व्यक्ति के उत्तर को उस बिंदु पर बदलने के लिए यह एक अच्छा विचार है जब मेरे पास मूल लेखक की तुलना में अधिक पाठ होगा।
दिमित्री ग्रिगोरीव

2

बैश स्क्रिप्ट में आप चला सकते हैं:

echo -n -
echo n

या इंटरसेक्टिव शेल में:

echo -n - ; echo n

यह echoएक -चरित्र और एक nचरित्र से बच जाता है।


क्या तुमने कोशिश की? यह गलत है।
पायलट 6


पहला कमांड आउटपुट -pilot6@Pilot6:~$। दूसरा आउटपुट n
पायलट 6

@ Pilot6 इस पर निर्भर करता है कि आप इसे इंटरेक्टिव टर्मिनल में या बैश स्क्रिप्ट में चला रहे हैं, जो प्रश्न में निर्दिष्ट नहीं है। OTOH यदि आपको इसकी आवश्यकता है तो टर्मिनल में बस दो लाइनों को मिला देना आसान है &&- मैं वास्तव में यह नहीं कहूंगा कि यह उत्तर गलत है
user12205

मैं इसे संपादित करता हूँ इसलिए यह एक bash स्क्रिप्ट के लिए बहुत स्पष्ट हो जाता है।
स्टार ओएस

1

तीन अन्य तरीके:

$ echo -e '\x2dn' # ASCII hexadecimal value
-n
$ echo -e '\u002dn' # Unicode code point
-n
$ echo -e '\u2dn' # Unicode code point shortened
-n

0

तुम दौड़ सकते हो

printf -n;echo

बिजीबॉक्स ऐश में परीक्षण किया गया


ऐश? ऐश? POKEMON मेरा मतलब है, क्या?
स्टार ओएस

मैंने 'बिजीबॉक्स ऐश'
चलायी

"बिजीबॉक्स" या "बिजीबॉक्स ऐश" कहें। न केवल "ऐश" बीक्युस लोग उस पोकेमॉन चरित्र या ज्वालामुखी से ******* राख के बारे में सोच सकते हैं।
स्टार ओएस

बेहतर। alt255alt255
स्टार ओएस

@StarOS ashअल्मक्विस्ट शेल का नाम है।
मुरु
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.