बैश प्रिंट्स में इको न्यूलाइन शाब्दिक \ n


2360

बैश में, यह कोशिश की:

echo -e "hello\nworld"

लेकिन यह केवल एक नई पंक्ति नहीं छापता है \n। मैं इसे कैसे प्रिंट कर सकता हूं?

मैं Ubuntu 11.04 का उपयोग कर रहा हूं।


263
"यह मेरे लिए काम करता है" कहने वालों के लिए, गूंज का व्यवहार संस्करणों के बीच काफी भिन्न होता है। कुछ अपने आउटपुट के हिस्से के रूप में "-ई" भी प्रिंट करेंगे। यदि आप किसी भी चीज के लिए अनुमानित व्यवहार चाहते हैं, तो इसके बजाय प्रिंटफ का उपयोग करें (जैसा कि @ sth के उत्तर में)।
गॉर्डन डेविसन 1

6
मुझे इस जवाब में कोई सुझाव नहीं मिला कि काम कर रहे हैं, क्योंकि, जैसा कि यह पता चला है, मैं इसे एक फ़ंक्शन में उपयोग करने का प्रयास कर रहा था जो एक मान लौटाता है , और फ़ंक्शन में सभी इको (और प्रिंटफ़) संदेशों को जोड़ा जा रहा है व्यक्तिगत रूप से न्यूलाइन्स छीन लिए जाने के बाद वापसी मूल्य । यहाँ इस बारे में एक सवाल है, जिसका उत्तर पूरी तरह से है: stackoverflow.com/questions/27872069/… यह तीन घंटे के रहस्य दौरे की तरह था।
अलिटरमाइंड

8
इसके अलावा उल्लेखनीय: यूनिक्स और लिनक्स स्टैक एक्सचेंज में, इको का उपयोग करते समय नई लाइनों को जोड़ने के लिए स्वीकृत उत्तर
ग्राहम पेरिन

@GrahamPerrin, वास्तव में बहुत अच्छे और विस्तृत उत्तर के लिए लिंक के लिए धन्यवाद! मुझे लगता है कि यह नीचे दिए गए उत्तरों से बेहतर है।
Konstantin

2
इको-एन "हेलो \ nworld" (आपको पलायन की व्याख्या करने के लिए एन ध्वज की आवश्यकता थी) - लेकिन जैसा कि अन्य कहते हैं, अलग-अलग इको कमांड के अलग-अलग परिणाम हो सकते हैं!
Konchog

जवाबों:


2872

आप printfइसके बजाय उपयोग कर सकते हैं :

printf "hello\nworld\n"

printfसे अधिक सुसंगत व्यवहार है echoechoविभिन्न संस्करणों के बीच भिन्नता का व्यवहार बहुत भिन्न होता है।


49
या यहां तक ​​कि printf %"s\n" hello world-
प्रिंटफ

28
ओपी ने गूंज के बारे में पूछा, प्रिंट नहीं; और @ कोरोबा का उत्तर, जो -e विकल्प का उपयोग करता है, बिल को पूरी तरह से भरता है।
JESii

56
@JESii: यदि विकल्प echoका समर्थन करने के लिए ऐसा होता है तो यह फिट बैठता -eहै।
sth

11
के कुछ संस्करणों के साथ echo, -eकेवल आउटपुट में ही मुद्रित किया जाता है, इसलिए मुझे लगता है कि यह उत्तर पूरी तरह से मान्य है क्योंकि echoयहां संगत नहीं है (जब तक कि हम एक विशिष्ट संस्करण के बारे में बात नहीं कर रहे हैं)।
तेजस मनोहर

14
यह अच्छी तरह से और अच्छा है अगर प्रिंटफ उपलब्ध है, लेकिन प्रतिध्वनि के विपरीत कभी-कभी प्रिंटो डिस्ट्रो पर नहीं होता है।
Bigtunacan

1711

क्या आप सुनिश्चित हैं कि आप bash में हैं? मेरे लिए काम करता है, सभी चार तरीके:

echo -e "Hello\nworld"
echo -e 'Hello\nworld'
echo Hello$'\n'world
echo Hello ; echo world

368
-इस झंडे ने मेरे लिए किया, जो "बैकस्लैश एस्केप की व्याख्या को सक्षम करता है"
टेंडी

21
मुझे लगता है कि -eपरम * सभी nix OS पर मौजूद नहीं है
kenorb

12
@kenorb: यह बैश में मौजूद है। यह एक बिलिन है।
चोरोबा

तीसरा काम क्यों करता है? $ के बिना यह "हैलो एन दुनिया"
इवान डोनोवन

21
जैसा कि विभिन्न अन्य ने उल्लेख किया है-सभी वितरण और संस्करणों के लिए काम नहीं करता है। कुछ मामलों में इसे नजरअंदाज कर दिया जाता है और अन्य में इसे वास्तव में छापा जाएगा। मुझे विश्वास नहीं है कि इसने इसे ओपी के लिए तय किया है इसलिए इसका जवाब स्वीकार नहीं किया जाना चाहिए
सीएसजी 5000

578
echo $'hello\nworld'

प्रिंट

hello
world

$''तार ANSI सी उद्धरण का उपयोग करें :

फॉर्म के शब्द विशेष रूप से व्यवहार किए जाते हैं। यह शब्द ANSI C मानक द्वारा निर्दिष्ट बैकस्लैश-एस्कैप्ड वर्णों के साथ स्ट्रिंग में फैलता है ।$'string'


15
@EvgeniSergeev यकीन नहीं है कि आप क्या मतलब है, लेकिन यह मेरे लिए पहले भी काम नहीं किया। और ऐसा इसलिए है क्योंकि मैं दोहरे उद्धरण चिह्नों का उपयोग कर रहा था और केवल एक उद्धरण के साथ यह काम करता है! मैक पर टर्मिनल में कोशिश की।
trss

11
स्ट्रिंग में चर के साथ समस्याओं का विस्तार नहीं किया जा रहा है।
विलेमडीह

आप अभी भी दोहरे-भाव के तारों को समेट सकते हैं। `फू =" बार "; इको $ '' $ foo'efoot'`
कामाफेदर

141

आप हमेशा कर सकते हैं echo ""

जैसे

echo "Hello"
echo ""
echo "World"

6
echo ""मेरे लिए काम करता है और मुझे लगता है कि नई लाइन को प्रिंट करना सबसे सरल रूप है, भले ही यह सीधे सवाल का जवाब न दे। चीयर्स।
मारियो अवध

2
मुझे लगता है कि यह कम स्पष्ट है (और इस तरह संभावित रूप से अधिक भ्रामक है) echo -en "\n"
DBedrenko

72
echoएक खाली लाइन प्राप्त करने के लिए पर्याप्त है
ROMANIA_engineer 20

5
@ ऑनलॉपर मेरे लिए ठीक काम करता है।
मैथ्यू पढ़ें

71

प्रयत्न

echo -e "hello\nworld"
hello
world

मेरे लिए nanoएडिटर में काम किया ।

आदमी पृष्ठ से:

-e बैकस्लैश पलायन की व्याख्या सक्षम करें


41

इस बंद मौका में कि कोई अपने आप को दीवार के खिलाफ अपना सिर पीटता हुआ पाता है, यह पता लगाने की कोशिश कर रहा है कि एक सहकर्मी की पटकथा नई रूपरेखा क्यों नहीं छापेगी, इसके लिए बाहर देखें ->

#!/bin/bash
function GET_RECORDS()
{
   echo -e "starting\n the process";
}

echo $(GET_RECORDS);

जैसा कि ऊपर कहा गया है, विधि के वास्तविक चलन को स्वयं एक प्रतिध्वनि में लपेटा जा सकता है जो किसी भी प्रतिध्वनियों को फैला देता है जो कि विधि में ही हो सकता है। जाहिर है मैं यह संक्षिप्तता के लिए पानी पिलाया, यह आसान नहीं था!

फिर आप अपने साथियों को सूचित कर सकते हैं कि कार्यों को निष्पादित करने का एक बेहतर तरीका ऐसा होगा:

#!/bin/bash
function GET_RECORDS()
{
   echo -e "starting\n the process";
}

GET_RECORDS;

सुनिश्चित करें कि आप चर को विधि से प्रतिध्वनित करने से पहले चर को लपेट लें।
चलो

23

यह मेरे लिए रास्पियन में काम करता है,

echo -e "hello\\nworld"

2
विंडोज 7 पर GitBash में मेरे लिए भी काम करता है ;-)
बिग रिच

3
एक सिंगल बैकलैश पर्याप्त होना चाहिए
फेलिक्स डी।

23

ईको पर POSIX 7

http://pubs.opengroup.org/onlinepubs/9699919799/utilities/echo.html

-e परिभाषित नहीं है और बैकस्लैश लागू किए गए परिभाषित हैं:

यदि पहला ऑपरेंड एक -n है, या यदि किसी भी ऑपरेंड में <backslash> वर्ण है, तो परिणाम कार्यान्वयन-परिभाषित होते हैं।

जब तक आपके पास वैकल्पिक XSI एक्सटेंशन नहीं है।

इसलिए मेरा सुझाव है कि आपको printfइसके बजाय उपयोग करना चाहिए , जो अच्छी तरह से निर्दिष्ट है:

प्रारूप ऑपरेंड XBD फ़ाइल प्रारूप संकेतन में वर्णित प्रारूप स्ट्रिंग के रूप में उपयोग किया जाएगा [...]

फ़ाइल स्वरूप संकेतन :

\ n <newline> छपाई की स्थिति को अगली पंक्ति के प्रारंभ में ले जाएँ।

यह भी ध्यान रखें कि उबंटू 15.10 और सबसे डिस्ट्रो echoदोनों को लागू करता है:

  • एक बैश में निर्मित: help echo
  • एक स्टैंडअलोन निष्पादन योग्य: which echo

जिसके कारण कुछ भ्रम हो सकता है।


17

बस टाइप करें

echo

एक नई लाइन पाने के लिए


3
बहुत ही कम जवाब में, यह विश्वास नहीं कर सकता कि इस सवाल ने 2011 से 20+ जवाबों को एकत्र किया है और उनमें से एक में भी यह सरल समाधान नहीं है।
प्रोमेथियस

alias c = 'इको; गूंज; गूंज; गूंज; गूंज; गूंज; गूंज; गूंज; गूंज; गूंज; गूंज; गूंज; गूंज; गूंज; गूंज; गूंज; गूंज; गूंज; गूंज; गूंज; गूंज; गूंज; गूंज; गूंज; गूंज; गूंज; गूंज; गूंज; गूंज; गूंज; गूंज; गूंज; गूंज; गूंज; गूंज; इको? ' यह एकमात्र तरीका है जिससे मैं अपनी स्क्रीन को साफ़ कर सकता हूँ, धन्यवाद!
एही टुना

@ अही टूना: कृपया अपने कंसोल कीबोर्ड शॉर्टकट का उपयोग करें :)
R Sun

@RSun और Chrome बुक पर डेबियन टर्मिनल विंडो पर मैं ऐसा कैसे करूंगा?
ऐही तूना

1
@AhiTuna स्पष्ट; या ctrl + l;
माइक बीज

16
str='hello\nworld'
$ echo | sed "i$str"
hello
world

यह वास्तव में एक महान जवाब है क्योंकि यह स्ट्रिंग संघनन के लिए काम करता है। महान!
लावास्कॉक्डऑवन

1
क्यों एक दूसरे कार्यक्रम को लागू करने के लिए परेशान? ऐसा नहीं है कि हम किसी वास्तविक समय एप्लिकेशन को बैश में लिखने का प्रयास कर रहे हैं;) लेकिन यह आवश्यक नहीं है।
फेलिक्स डी।

यह वास्तव में एक महान जवाब है जो हर जगह काम करना चाहिए चाहे कोई भी हो। आपने मेरे दिन के दोस्त @alinsoar
कश्यप कोटक


6

आप भी कर सकते हैं:

echo "hello
world"

यह एक स्क्रिप्ट के अंदर और कमांड लाइन से दोनों काम करता है।
कमांड लाइन में, स्ट्रिंग के अंदर लाइन ब्रेक करने के लिए Shift+ दबाएँ Enter

यह मेरे लिए मेरे macOS और मेरे Ubuntu 18.04 पर काम करता है


जब आप ?nter` दबाते हैं, तो कमांड चलाने के लिए शेल के बिना आप उस लाइन को कैसे टाइप करते हैं?
एक्सनोस

@Xenos यह एक स्क्रिप्ट में अच्छा काम करता है। और कंसोल में, अधूरा कमांड चलाने के लिए शेल होने से बचने के लिए बस एक नई लाइन जोड़ने के लिए Shift + Enter पर क्लिक करें।
विन्जी

5

उन लोगों के लिए यहां एक और प्रविष्टि जो इसे इन समाधानों में से किसी के साथ काम नहीं करता था, और उन्हें अपने फ़ंक्शन से वापसी मूल्य प्राप्त करने की आवश्यकता है:

function foo()
{
    local v="Dimi";
    local s="";
    .....
    s+="Some message here $v $1\n"
    .....
    echo $s
}

r=$(foo "my message");
echo -e $r;

केवल इस ट्रिक ने इस bash के साथ काम कर रहे एक linux में काम किया:

GNU bash, version 2.2.25(1)-release (x86_64-redhat-linux-gnu)

आशा है कि यह इसी तरह की समस्या के साथ किसी को मदद करता है।


4

मेरी स्क्रिप्ट:

echo "WARNINGS: $warningsFound WARNINGS FOUND:\n$warningStrings

आउटपुट:

WARNING : 2 WARNINGS FOUND:\nWarning, found the following local orphaned signature file:

मेरी बैश स्क्रिप्ट पर मैं तब तक पागल हो रहा था जब तक कि मैंने सिर्फ कोशिश नहीं की:

echo "WARNING : $warningsFound WARNINGS FOUND:
$warningStrings"

बस हिट दर्ज करें जहां आप उस कूद को सम्मिलित करना चाहते हैं। अब आउटपुट है:

WARNING : 2 WARNINGS FOUND:
Warning, found the following local orphaned signature file:

4
बस एक नोट, आप शायद अपने चर नामों के आसपास $ {} का उपयोग करना चाहेंगे क्योंकि ऐसा नहीं करने पर वास्तव में अजीब व्यवहार हो सकता है जब एक शेल $ चेतावन नामक एक चर पाता है और प्रिंट करता है और दो अलग-अलग आउटपुट नहीं।
ड्रैगन 88 --88

@ dragon788 शायद मुझे कुछ याद आ रहा है, लेकिन वास्तव में चर को $ चेतावनी कहा जाता है?
Psynnott

2
मुझे उस पर एक शब्द याद आया। यदि आपके पास $ {warningsFound} का उपयोग किए बिना कुछ मामलों में $ चेतावनियां नामक एक चर था, तो आप अपने इच्छित चर के बजाय $ चेतावनियों + "मिली" की सामग्री के साथ संभावित रूप से समाप्त हो सकते हैं।
ड्रैगन 788

3

तुम भी ब्रेसिज़ के साथ गूंज का उपयोग कर सकते हैं,

$ (echo hello; echo world)
hello
world

अप्रत्याशित टोकन के पास सिंटैक्स त्रुटि `(जब .sh फ़ाइल में कहा जाता है
cos3711

1
कोशिशecho hello; echo world
अविनाश राज

1
या "इको हेल्लो && इको वर्ल्ड" या
जस्ट

3

यह बेहतर के रूप में किया जा सकता है

x="\n"
echo -ne $x

-इस
विकल्प के पीछे अनुक्रम की व्याख्या होगी, जो अनुक्रम के लिए -n विकल्प आउटपुट में अनुगामी न्यूलाइन को हटा देगा

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


प्रश्न के सटीक उत्तर के लिए प्रतिध्वनि "हैलो \ nworld" :)
धवनित

3

इसमें एक नया पैरामीटर विस्तार जोड़ा गया है bash 4.4जो कि एस्केप सीक्वेंस की व्याख्या करता है:

${parameter@operator} - E operator

विस्तार एक स्ट्रिंग है जो $'…'उद्धृत तंत्र के साथ विस्तारित बैकस्लैश एस्केप अनुक्रमों के साथ पैरामीटर का मान है ।

$ foo='hello\nworld'
$ echo "${foo@E}"
hello
world

2

यदि आप स्क्रिप्ट लिख रहे हैं और कई बार अन्य संदेशों के हिस्से के रूप में नई-नई कहानियां गूँज रहे हैं, तो एक अच्छा क्रॉस-प्लेटफ़ॉर्म समाधान एक शाब्दिक नई पंक्ति को एक चर में रखना है जैसे:

newline='
'

echo "first line$newlinesecond line"
echo "Error: example error message n${newline}${usage}" >&2 #requires usage to be defined

0

कभी-कभी आप एक स्थान से अलग किए गए कई तारों को पारित कर सकते हैं और इसकी व्याख्या की जाएगी \n

उदाहरण के लिए, बहु-पंक्ति सूचनाओं के लिए शेल स्क्रिप्ट का उपयोग करते समय:

#!/bin/bash
notify-send 'notification success' 'another line' 'time now '`date +"%s"`

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

0

मुझे बैश प्रोफ़ाइल (MacOx, iTerm) में एक उपनाम के रूप में उपयोग करते हुए पाठ को दोहरे उद्धरणों से घेरना था।

alias helloworld="echo -e \"hello \n world\""

0

यह मुझे वहाँ मिल गया ...।

outstuff=RESOURCE_GROUP=[$RESOURCE_GROUP]\\nAKS_CLUSTER_NAME=[$AKS_CLUSTER_NAME]\\nREGION_NAME=[$REGION_NAME]\\nVERSION=[$VERSION]\\nSUBNET-ID=[$SUBNET_ID]
printf $outstuff

पैदावार:

RESOURCE_GROUP=[akswork-rg]
AKS_CLUSTER_NAME=[aksworkshop-804]
REGION_NAME=[eastus]
VERSION=[1.16.7]
SUBNET-ID=[/subscriptions/{subidhere}/resourceGroups/makeakswork-rg/providers/Microsoft.Network/virtualNetworks/aks-vnet/subnets/aks-subnet]

-1

मैं सिर्फ गूंज का उपयोग करता हूं कोई तर्क नहीं

echo "Hello"
echo
echo "World"

-2

अतिरिक्त समाधान:

मामलों में, आपको लंबी सामग्री (जैसे कोड / कॉन्फ़िगरेशन) की बहु-प्रतिध्वनी को ग्रहण करना होगा

उदाहरण के लिए :

  • कोड / कॉन्फ़िगरेशन उत्पन्न करने के लिए एक बैश स्क्रिप्ट

echo -e, printfकुछ सीमा हो सकती है

आप लाइन ब्रेक (जैसे ~) के रूप में प्लेसहोल्डर के रूप में कुछ विशेष चार का उपयोग कर सकते हैं और फ़ाइल का उपयोग करने के बाद इसे बदल सकते हैंtr

echo ${content} | tr '~' '\n' > $targetFile

इसके लिए एक और कार्यक्रम ( tr) शुरू करने की जरूरत है जो ठीक होना चाहिए IMO।

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