बैश में, यह कोशिश की:
echo -e "hello\nworld"
लेकिन यह केवल एक नई पंक्ति नहीं छापता है \n
। मैं इसे कैसे प्रिंट कर सकता हूं?
मैं Ubuntu 11.04 का उपयोग कर रहा हूं।
बैश में, यह कोशिश की:
echo -e "hello\nworld"
लेकिन यह केवल एक नई पंक्ति नहीं छापता है \n
। मैं इसे कैसे प्रिंट कर सकता हूं?
मैं Ubuntu 11.04 का उपयोग कर रहा हूं।
जवाबों:
आप printf
इसके बजाय उपयोग कर सकते हैं :
printf "hello\nworld\n"
printf
से अधिक सुसंगत व्यवहार है echo
। echo
विभिन्न संस्करणों के बीच भिन्नता का व्यवहार बहुत भिन्न होता है।
printf %"s\n" hello world
-
echo
का समर्थन करने के लिए ऐसा होता है तो यह फिट बैठता -e
है।
echo
, -e
केवल आउटपुट में ही मुद्रित किया जाता है, इसलिए मुझे लगता है कि यह उत्तर पूरी तरह से मान्य है क्योंकि echo
यहां संगत नहीं है (जब तक कि हम एक विशिष्ट संस्करण के बारे में बात नहीं कर रहे हैं)।
क्या आप सुनिश्चित हैं कि आप bash में हैं? मेरे लिए काम करता है, सभी चार तरीके:
echo -e "Hello\nworld"
echo -e 'Hello\nworld'
echo Hello$'\n'world
echo Hello ; echo world
-e
परम * सभी nix OS पर मौजूद नहीं है
echo $'hello\nworld'
प्रिंट
hello
world
$''
तार ANSI सी उद्धरण का उपयोग करें :
फॉर्म के शब्द विशेष रूप से व्यवहार किए जाते हैं। यह शब्द ANSI C मानक द्वारा निर्दिष्ट बैकस्लैश-एस्कैप्ड वर्णों के साथ स्ट्रिंग में फैलता है ।
$'string'
आप हमेशा कर सकते हैं echo ""
।
जैसे
echo "Hello"
echo ""
echo "World"
echo ""
मेरे लिए काम करता है और मुझे लगता है कि नई लाइन को प्रिंट करना सबसे सरल रूप है, भले ही यह सीधे सवाल का जवाब न दे। चीयर्स।
echo -en "\n"
।
echo
एक खाली लाइन प्राप्त करने के लिए पर्याप्त है
प्रयत्न
echo -e "hello\nworld"
hello
world
मेरे लिए nano
एडिटर में काम किया ।
आदमी पृष्ठ से:
-e
बैकस्लैश पलायन की व्याख्या सक्षम करें
इस बंद मौका में कि कोई अपने आप को दीवार के खिलाफ अपना सिर पीटता हुआ पाता है, यह पता लगाने की कोशिश कर रहा है कि एक सहकर्मी की पटकथा नई रूपरेखा क्यों नहीं छापेगी, इसके लिए बाहर देखें ->
#!/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;
यह मेरे लिए रास्पियन में काम करता है,
echo -e "hello\\nworld"
ईको पर 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
जिसके कारण कुछ भ्रम हो सकता है।
बस टाइप करें
echo
एक नई लाइन पाने के लिए
str='hello\nworld'
$ echo | sed "i$str"
hello
world
यह मेरे लिए CentOS में काम करता है:
echo -e ""hello\nworld""
आप भी कर सकते हैं:
echo "hello
world"
यह एक स्क्रिप्ट के अंदर और कमांड लाइन से दोनों काम करता है।
कमांड लाइन में, स्ट्रिंग के अंदर लाइन ब्रेक करने के लिए Shift+ दबाएँ Enter।
यह मेरे लिए मेरे macOS और मेरे Ubuntu 18.04 पर काम करता है
उन लोगों के लिए यहां एक और प्रविष्टि जो इसे इन समाधानों में से किसी के साथ काम नहीं करता था, और उन्हें अपने फ़ंक्शन से वापसी मूल्य प्राप्त करने की आवश्यकता है:
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)
आशा है कि यह इसी तरह की समस्या के साथ किसी को मदद करता है।
मेरी स्क्रिप्ट:
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:
तुम भी ब्रेसिज़ के साथ गूंज का उपयोग कर सकते हैं,
$ (echo hello; echo world)
hello
world
echo hello; echo world
यह बेहतर के रूप में किया जा सकता है
x="\n"
echo -ne $x
-इस
विकल्प के पीछे अनुक्रम की व्याख्या होगी, जो अनुक्रम के लिए -n विकल्प आउटपुट में अनुगामी न्यूलाइन को हटा देगा
पुनश्च: कमांड गूंज का हमेशा एक प्रभाव होता है जिसमें आउटपुट में एक अनुगामी न्यूलाइन शामिल होती है, इसलिए उस चीज़ को बंद करना आवश्यक होता है (और इसे कम भ्रमित करना)
इसमें एक नया पैरामीटर विस्तार जोड़ा गया है bash 4.4
जो कि एस्केप सीक्वेंस की व्याख्या करता है:
${parameter@operator} - E operator
विस्तार एक स्ट्रिंग है जो
$'…'
उद्धृत तंत्र के साथ विस्तारित बैकस्लैश एस्केप अनुक्रमों के साथ पैरामीटर का मान है ।
$ foo='hello\nworld'
$ echo "${foo@E}"
hello
world
यदि आप स्क्रिप्ट लिख रहे हैं और कई बार अन्य संदेशों के हिस्से के रूप में नई-नई कहानियां गूँज रहे हैं, तो एक अच्छा क्रॉस-प्लेटफ़ॉर्म समाधान एक शाब्दिक नई पंक्ति को एक चर में रखना है जैसे:
newline='
'
echo "first line$newlinesecond line"
echo "Error: example error message n${newline}${usage}" >&2 #requires usage to be defined
कभी-कभी आप एक स्थान से अलग किए गए कई तारों को पारित कर सकते हैं और इसकी व्याख्या की जाएगी \n
।
उदाहरण के लिए, बहु-पंक्ति सूचनाओं के लिए शेल स्क्रिप्ट का उपयोग करते समय:
#!/bin/bash
notify-send 'notification success' 'another line' 'time now '`date +"%s"`
\n
। इसे प्रोग्राम के एक अलग तर्क के रूप में व्याख्यायित किया जाता है, और प्रोग्राम स्वयं उस तर्क को एक नई लाइन पर प्रदर्शित कर सकता है, लेकिन इसका मतलब यह नहीं है कि यह \n
किसी भी बिंदु पर परिवर्तित हो गया था और पूरी तरह से प्रोग्राम पर निर्भर है।
यह मुझे वहाँ मिल गया ...।
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]
अतिरिक्त समाधान:
मामलों में, आपको लंबी सामग्री (जैसे कोड / कॉन्फ़िगरेशन) की बहु-प्रतिध्वनी को ग्रहण करना होगा
उदाहरण के लिए :
echo -e
,
printf
कुछ सीमा हो सकती है
आप लाइन ब्रेक (जैसे ~
) के रूप में प्लेसहोल्डर के रूप में कुछ विशेष चार का उपयोग कर सकते हैं और फ़ाइल का उपयोग करने के बाद इसे बदल सकते हैंtr
echo ${content} | tr '~' '\n' > $targetFile
इसके लिए एक और कार्यक्रम ( tr
) शुरू करने की जरूरत है जो ठीक होना चाहिए IMO।