शेल स्क्रिप्ट फाइल करने के लिए नई लाइन गूँजती है


26

मैं एक शेल स्क्रिप्ट में चर के बीच एक फ़ाइल के लिए एक नई लाइन गूंजना चाहता हूं। यहाँ मेरा कोड है:

var1 = "नमस्ते"
var2 = "दुनिया!"
logwrite = "$ var1 [यहाँ वह जगह है जहाँ मैं एक नई लाइन डालना चाहता हूँ] $ var2
इको "$ logwrite" >>

अभी, जब मैं अपनी स्क्रिप्ट चलाता हूं, फ़ाइल user.txt इसे दिखाता है:

नमस्ते दुनिया!

मैं यह दिखाना चाहता हूं:

नमस्ते
विश्व!

मैं यह कैसे करु??

संपादित करें: यहाँ मेरी शेल स्क्रिप्ट है:

इको-एन "आपका पहला नाम क्या है?"
पहले पढ़ें
इको-एन "आपका अंतिम नाम क्या है?"
पिछले पढ़ें
इको-एन "आपका मध्य नाम क्या है?"
बीच में पढ़ें
इको-एन "आपका जन्मदिन क्या है?"
जन्मदिन पढ़ें
इको-ई "प्रथम नाम: $ प्रथम / nLast नाम: $ अंतिम / niddle नाम: $ मध्य / n जन्मदिन: $ जन्मदिन" >> /Users/matthewdavies/Desktop/user.txt
qlmanage -p "~ / Desktop / user.txt"

1
क्या आपको यह "लॉगराइट" चर बनाने की आवश्यकता है? क्या आप लिख सकते हैं printf "%s\n" $var1 $var2 >> file?
ग्लेन जैकमैन

नहीं, मुझे अपनी संशोधित स्क्रिप्ट में और उस पर काम करने की आवश्यकता नहीं है, जिस पर मैं काम कर रहा हूं, मैं $ logwrite चर का उपयोग नहीं करता हूं। धन्यवाद।
daviesgeek

जवाबों:


32
var1="Hello"
var2="World!"
logwrite="$var1\n$var2"
echo -e "$logwrite"  >> /Users/username/Desktop/user.txt

स्पष्टीकरण:

\nएस्केप अनुक्रम एक लाइन फ़ीड इंगित करता है। -eप्रतिध्वनि के तर्क को पारित करने से बच अनुक्रमों की व्याख्या सक्षम हो जाती है।

इसे और भी सरल बनाया जा सकता है:

var1="Hello"
var2="World!"
echo -e "$var1\n$var2"  >> /Users/username/Desktop/user.txt

या और भी:

echo -e "Hello\nWorld! "  >> /Users/username/Desktop/user.txt

आपका उदाहरण काम करता है, लेकिन जब मैं इसे अपने कोड में शामिल करता हूं, तो यह काम नहीं करता है। मैं अपनी पोस्ट संपादित करूंगा और इसमें अपनी स्क्रिप्ट जोड़ूंगा।
daviesgeek

1
@ यह प्रतीत होता है कि आप भागने के क्रम के साथ गलत स्लैश का उपयोग कर रहे हैं। \nइसके बजाय /nचाल चलनी चाहिए :)
जॉन टी।

वह इसे ठीक करता है (/ n के बजाय \ n का उपयोग करके। बहुत बहुत धन्यवाद !!
daviesgeek

@ आप स्वागत से कहीं अधिक हैं :)
जॉन टी।

KSH स्क्रिप्ट में AIX पर मुझे -eध्वज की आवश्यकता नहीं थी ।
javaPl4242

5
var1='Hello'
var2='World!'
echo "$var1" >> /Users/username/Desktop/user.txt
echo "$var2" >> /Users/username/Desktop/user.txt

या वास्तव में आपको var की आवश्यकता नहीं है:

echo 'Hello' >> /Users/username/Desktop/user.txt
echo 'World!' >> /Users/username/Desktop/user.txt

जॉन टी उत्तर के साथ एक समस्या है: यदि किसी भी संस्करण में \ n स्ट्रिंग (या कुछ अन्य अनुक्रम जैसे \ t) थे तो उनका अनुवाद हो जाएगा। प्रिंटफ के साथ उनके उत्तर के समान कुछ मिल सकता है:

printf '%s\n%s\n' 'Hello' 'World!'

हम्म भी। मैं देख रहा हूँ कि आप एक चर $ logwrite में उत्तर की रचना कर रहे हैं। यदि यह इस चर का एकमात्र उपयोग है, तो यह व्यर्थ लगता है।

मुझे लगता है कि यहाँ-डॉक्टर अधिक पठनीय हो सकता है, खासकर यदि आपके पास लॉग को जोड़ने के लिए बहुत सारी लाइन है:

cat >> /Users/username/Desktop/user.txt <<EOF
Hello
World
EOF

(यह शब्द, EOF, एक परिसीमन है जिसे आप चुन सकते हैं। यह कोई भी शब्द हो सकता है)।

सावधान रहें कि हेरेडोक दोहरे उद्धरण चिह्नों की तरह $ चर का विस्तार करेगा। यदि आप ऐसा नहीं चाहते हैं, तो आप हेरेडोक को उद्धृत करेंगे, जैसे << "EOF"


बात किसी भी संस्करण की नहीं है \n, इसलिए मैंने जवाब क्यों दिया। "क्या होगा अगर" पद्धति इस साइट पर हर प्रश्न को अंतहीन चर्चा में ले जाएगी। जब वह उस सड़क पर आता है तो वह एक और सवाल पूछ सकता है :)
जॉन टी।

जैसे ही मैं बदलाव कर रहा था @elias $ logwrite चर स्क्रिप्ट पर मेरे संपादन से बचा हुआ था। मैंने अपने कोड से $ लॉगराइट संस्करण लिया। जॉन टी। का जवाब वास्तव में काम करता था। बहुत बहुत धन्यवाद!
daviesgeek

हाँ, उपयोग करें printf। यह POSIX: stackoverflow.com/a/34947759/895245
Ciro Santilli 中心 法轮功 stack stack
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.