मैं गाड़ी वापसी के बिना $ $ >> file.txt कैसे गूँज सकता हूँ?


81

जब मैं echo $something >> file.txt, एक नई लाइन फ़ाइल के लिए संलग्न हो जाएगा।

क्या होगा अगर मैं एक नई लाइन के बिना संलग्न करना चाहता हूं?


3
सावधान रहें echo $something, इसका व्यवहार IFSचर पर निर्भर करता है , और आप गायब चरित्र के साथ समाप्त हो सकते हैं। आप निम्नलिखित की कोशिश कर सकते हैं: var="hello world"; echo $var(हैलो और दुनिया के बीच दो रिक्त स्थान) या var="hello world"; IFS='l'; echo $varया var="-e hello \\n world"; echo $var। इसे हल करने के लिए, इस तरह से चर के आसपास दोहरे उद्धरण लगाएं: echo "$var"या उपयोग करें printf
jfg956

जवाबों:


96

इसके echo -nलिए जो है।


4
वहाँ के लिए एक बराबर है cat? (उदाहरण के लिए जब आपके पास एक something.txtचर के बजाय एक फ़ाइल है $something)
cboettig

1
@ कॉबिगेट: नहीं। हर चीज को प्रिंट करने के लिए एक अलग टूल का उपयोग करें लेकिन अंतिम न्यूलाइन।
इग्नासियो वाज़केज़-अब्राम्स

@ कॉबिगेट, कैट डिफॉल्ट रूप से आउटपुट में कुछ भी नहीं जोड़ता है, इसलिए बिल्ली के लिए 'एन-एन' परम की कोई आवश्यकता नहीं है। उदाहरण के लिए, यदि आपकी फ़ाइल में अंतिम पंक्ति में लाइन-एंडिंग नहीं है, तो आपका शेल प्रॉम्प्ट फ़ाइल के अंतिम वर्ण के ठीक बाद प्रिंट किया जाएगा और नई लाइन में नहीं होगा
रोंडो

41

printfकी तुलना में बहुत लचीला और अधिक पोर्टेबल है echo। C / Perl / etc कार्यान्वयन की तरह, यदि आप प्रारूप स्ट्रिंग को समाप्त नहीं करते हैं \nतो कोई नई पंक्ति नहीं छपी है:

printf "%s" "$something" >> file.txt

7

यदि आप कमांड के आउटपुट का उपयोग कर रहे हैं, तो आप इको के साथ संयोजन में xargs का उपयोग कर सकते हैं

/sbin/ip route|awk '/default/ { print $3 }' | xargs echo -n >> /etc/hosts

0

tr एक और विकल्प है।

यदि आप echoअपने इनपुट के रूप में उपयोग कर रहे हैं तो आप दूर हो सकते हैं tr -d '\n'

यह तकनीक तब भी काम करती है जब अन्य कमांड से आउटपुट में पाइपिंग (आउटपुट की केवल एक लाइन के साथ)। इसके अलावा, अगर आपको पता नहीं है कि फाइल में UNIX या DOS लाइन एंडिंग्स हैं जिनका आप उपयोग कर सकते हैं tr -d '\n\r'

यहाँ कुछ परीक्षण दिखा रहे हैं कि यह काम करता है।

न्यूलाइन में शामिल हैं:

something='0123456789' ; echo ${something} | wc -c
11

UNIX की नई पंक्ति:

something='0123456789' ; echo ${something} | tr -d '\n\r' | wc -c
10

डॉस शैली:

something='0123456789' ; echo ${something} | unix2dos | tr -d '\n\r' | wc -c
10

बीएसडी trऔर जीएनयू के साथ परीक्षण किया गया tr

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