শেল স্ক্রিপ্ট ফাইলগুলিতে নতুন লাইনের প্রতিধ্বনি দেয়


26

আমি একটি শেল স্ক্রিপ্টের ভেরিয়েবলের মধ্যে একটি ফাইলের একটি নতুন লাইন প্রতিধ্বনি করতে চাই। আমার কোডটি এখানে:

var1 হল = "hello"
var2 = "ওয়ার্ল্ড!"
লগরাইট = "$ var1 [আমি এখানে একটি নতুন লাইন sertোকাতে চাই]] $ var2
প্রতিধ্বনি "$ লগ রাইট" >> / ব্যবহারকারী / ব্যবহারকারীর নাম / ডেস্কটপ / ব্যবহারকারী / টেক্সট

এই মুহুর্তে, আমি যখন আমার স্ক্রিপ্টটি চালাচ্ছি, তখন ফাইল .r.txt ফাইলটি এটি দেখায়:

ওহে বিশ্ব!

আমি এটি প্রদর্শন করতে চান:

হ্যালো
বিশ্ব!

আমি এটা কিভাবে করবো??

সম্পাদনা: এখানে আমার শেল স্ক্রিপ্ট:

প্রতিধ্বনি -n "আপনার প্রথম নাম কি?"
প্রথমে পড়ুন
প্রতিধ্বনি -n "আপনার শেষ নাম কি?"
শেষ পড়া
প্রতিধ্বনি -n "আপনার মাঝের নামটি কী?"
মাঝখানে পড়ুন
প্রতিধ্বনি -n "আপনার জন্মদিন কী?"
জন্মদিন পড়ুন
প্রতিধ্বনি- "" প্রথম নাম: $ প্রথম / এন শেষ নাম: $ শেষ / এনমিল্ড নাম: $ মাঝারি / এন জন্মদিন: $ জন্মদিন ">> / ব্যবহারকারী / মাতৃদেবস / ডিজেকটপ / ব্যবহারকারীর
qlmanage -p "~ / ডেস্কটপ / ইউজার। txt"

1
আপনি কি এই "লগ রাইট" ভেরিয়েবলটি তৈরি করার প্রয়োজন? আপনি লিখতে পারেন printf "%s\n" $var1 $var2 >> file?
গ্লেন জ্যাকম্যান

না, আমার যে সংশোধিত স্ক্রিপ্টে আমি কাজ করছি তার দরকার নেই এবং আমি $ লগ ​​রাইট ভেরিয়েবল ব্যবহার করি না। ধন্যবাদ।
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

আপনার উদাহরণটি কাজ করে, কিন্তু যখন আমি এটি আমার কোডটিতে অন্তর্ভুক্ত করি তখন এটি কার্যকর হয় না। আমি আমার পোস্টটি সম্পাদনা করব এবং এতে আমার স্ক্রিপ্ট যুক্ত করব।
ডেভিজেক

1
@ ডেভ এটি প্রদর্শিত হয় আপনি পালানোর ক্রম সহ ভুল স্ল্যাশ ব্যবহার করছেন। \nপরিবর্তে /nকৌতুক করা উচিত :)
জন টি

এটি এটিকে ঠিক করে দেয় (/ n এর পরিবর্তে using n ব্যবহার করে Thanks n অনেক অনেক ধন্যবাদ !!
ডেভিসেক 20

@dave আপনি স্বাগত চেয়ে বেশি :) করছি
জন টি

কেএসএইচ স্ক্রিপ্টে এআইএক্স-এ আমার -eপতাকা লাগেনি ।
javaPLAY42

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

অথবা আসলে আপনার ভারসের দরকার নেই:

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

জন টি উত্তর সহ একটি সমস্যা আছে: ভার্সগুলির মধ্যে যদি কোনওটির \ n স্ট্রিং থাকে (বা অন্য কোনও অনুক্রমের মতো \ t) থাকে তবে তারা অনুবাদ পাবেন। প্রিন্টফের সাহায্যে তার উত্তরের অনুরূপ কিছু পাওয়া যায়:

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

হুঁ। আমি দেখতে পাচ্ছি আপনি উত্তরটি একটি ভেরিয়েবল $ লগ ​​রাইটে রচনা করছেন। এটি যদি এই চলকটির একমাত্র ব্যবহার হয় তবে এটি অর্থহীন বলে মনে হয়।

আমি মনে করি একটি এখানে-ডকটি আরও পঠনযোগ্য হতে পারে, বিশেষত যদি আপনার লগতে যুক্ত করার জন্য প্রচুর লাইন থাকে:

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

(এই শব্দটি, ইওএফ, আপনি বেছে নিতে পারেন এমন একটি ডিলিমিটার it এটি কোনও শব্দ হতে পারে)।

সাবধান হোন যে হেরডোকটি ডাবল কোটের মতো $ ভেরিয়েবলগুলি প্রসারিত করবে। আপনি যদি এটি না চান তবে << "ইওএফ" এর মতো আপনি হেরিডোকটি উদ্ধৃত করুন


জিনিসটি কোনও ভার্সের নয় \n, তাই আমি কেন উত্তরটি সরবরাহ করেছি। "যদি তবে" পদ্ধতিটি এই সাইটের প্রতিটি প্রশ্নকে একটি অন্তহীন আলোচনার দিকে নিয়ে যায়। তিনি যখন সেই রাস্তায় আসেন তখন তিনি অন্য একটি প্রশ্ন জিজ্ঞাসা করতে পারেন :)
জন টি

@ এলিয়াস $ লগরাইটের পরিবর্তনশীল আমার পরিবর্তনগুলি থেকে স্ক্রিপ্টে থাকা আমার সম্পাদনা থেকে রইল। আমি আমার কোডের বাইরে $ লগই রাইটটি পেয়েছি। জন টি এর উত্তর আসলে কাজ করে। অনেক ধন্যবাদ!
daviesgeek

হ্যাঁ, ব্যবহার printf। এটি পজিক্স: স্ট্যাকওভারফ্লো.
com/a/34947759
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.