বাশ প্রিন্টে ইকো নিউলাইন \ n


2359

বাশে, এটি চেষ্টা করে দেখুন:

echo -e "hello\nworld"

তবে এটি কেবল একটি নতুন লাইন মুদ্রণ করে না \n। আমি কীভাবে এটি নতুন লাইনে মুদ্রণ করতে পারি?

আমি উবুন্টু 11.04 ব্যবহার করছি।


263
"এটি আমার পক্ষে কাজ করে" বলছেন তাদের জন্য, প্রতিধ্বনের আচরণ সংস্করণগুলির মধ্যে কিছুটা ভিন্ন হয়। কিছু এমনকি তাদের আউটপুট অংশ হিসাবে "-e" মুদ্রণ করবে। যদি আপনি অনানুষ্ঠানিক কোনও কিছুর জন্য অনুমানযোগ্য আচরণ চান তবে তার পরিবর্তে প্রিন্টফ ব্যবহার করুন (@ স্টাথের উত্তর হিসাবে)।
গর্ডন ডেভিসন

6
আমি এই উত্তরটিতে কোনও পরামর্শই কাজ করতে পারিনি , কারণ এটি দেখা যাচ্ছে যে, আমি এটি একটি ফাংশনে এটি ব্যবহার করার চেষ্টা করছিলাম যা কোনও মান দেয় এবং ফাংশনে থাকা সমস্ত প্রতিধ্বনি (এবং প্রিন্টফ) বার্তাগুলিতে সংযোজন করা হয়েছিল স্বতন্ত্রভাবে নিউলাইনগুলি ছিনিয়ে নেওয়ার পরে ফেরতের মান । একটি অত্যন্ত পুঙ্খানুপুঙ্খ উত্তরের সাথে এখানে এই সম্পর্কিত একটি প্রশ্ন রয়েছে: stackoverflow.com/questions/27872069/… এটি ছিল তিন ঘন্টার রহস্য ভ্রমণের মতো।
aliteralmind

8
উল্লেখযোগ্য: ইউনিক্স এবং লিনাক্স স্ট্যাক এক্সচেঞ্জে, প্রতিধ্বনি ব্যবহার করার সময় কীভাবে নতুন লাইন যুক্ত করা যায় তার গ্রহণযোগ্য উত্তর
গ্রাহাম পেরিন

@ গ্রাহামপেরিন, সত্যিই খুব ভাল এবং বিস্তারিত উত্তরের লিঙ্কটির জন্য ধন্যবাদ! আমি মনে করি এটি নীচের উত্তরগুলির চেয়ে ভাল।
কনস্টান্টিন

2
প্রতিধ্বনি-"" হ্যালো \ nworld "(আপনারা পালানোর জন্য এন ফ্ল্যাগের প্রয়োজন ছিল) - তবে অন্যেরা যেমন বলে থাকেন, বিভিন্ন ইকো কমান্ডের বিভিন্ন ফলাফল থাকতে পারে!
কনচোগ

উত্তর:


2872

printfপরিবর্তে আপনি ব্যবহার করতে পারেন :

printf "hello\nworld\n"

printfতুলনায় আরও সুসংগত আচরণ আছে echo। এর আচরণ echoবিভিন্ন সংস্করণের মধ্যে বিস্তরভাবে পরিবর্তিত হয়।


49
বা এমনকি printf %"s\n" hello world- অনেক বেশি যুক্তি দেওয়া থাকলে
প্রিন্টফ

28
ওপি প্রিন্টএফ নয়, প্রতিধ্বনি সম্পর্কে জিজ্ঞাসা করেছিল; এবং নীচে @ চোরোবার উত্তর, যা -e বিকল্পটি ব্যবহার করে, বিলটি পুরোপুরি পূরণ করে।
JESii

56
@ জেসিআই: আপনার বিকল্পটি echoসমর্থন করার ক্ষেত্রে এটি ফিট করে -e
sth

11
এর কয়েকটি সংস্করণ সহ echo, -eকেবলমাত্র আউটপুটেই মুদ্রিত হয় তাই আমি মনে করি যে এই উত্তরটি এখানে যথাযথ নয় কারণ echoএখানে সামঞ্জস্যপূর্ণ নয় (যদি না আমরা একটি নির্দিষ্ট সংস্করণের কথা বলি)।
তেজাস মনোহর

14
প্রিন্টফ পাওয়া গেলে এটি ভাল এবং ভাল, তবে প্রতিধ্বনির বিপরীতে কখনও কখনও প্রিন্টফ ডিসট্রোতে থাকে না।
বিগুনটাকান

1711

আপনি কি নিশ্চিত যে আপনি ব্যাশে আছেন? চারটি উপায়ে আমার জন্য কাজ করে:

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

368
-এ পতাকাটি আমার জন্য করেছিল, যা "ব্যাকস্ল্যাশ
পলায়নের

21
আমি মনে করি -eসমস্ত * নিক্স ওএসে
পরম

12
@ টেনরব: এটি ব্যাশে বিদ্যমান। এটি একটি অন্তর্নির্মিত।
চোরোবা

তৃতীয়টি কেন কাজ করে? $ ছাড়া এটি "হ্যালো এন ওয়ার্ল্ড"
ইভান ডোনভান

21
যেমন অন্যান্য বিভিন্ন দ্বারা উল্লিখিত হয়েছে - সমস্ত বিতরণ এবং সংস্করণে কাজ করে না। কিছু ক্ষেত্রে এটি উপেক্ষা করা হয় এবং অন্যান্য ক্ষেত্রে এটি প্রকৃতপক্ষে মুদ্রণ করা হবে। আমি বিশ্বাস করি না যে এটি ওপি-র জন্য এটি স্থির হয়েছে তাই উত্তর গ্রহণ করা উচিত নয়
csga5000

578
echo $'hello\nworld'

কপি করে প্রিন্ট

hello
world

$''স্ট্রিংগুলি এএনএসআই সি উদ্ধৃতি ব্যবহার করে :

ফর্মের শব্দগুলি বিশেষভাবে চিকিত্সা করা হয়। শব্দটি স্ট্রিংয়ে প্রসারিত হয় , এএনএসআই সি স্ট্যান্ডার্ড অনুসারে ব্যাকস্ল্যাশ-পলায়নযুক্ত অক্ষর প্রতিস্থাপন করা হয়েছিল।$'string'


15
@ এভেজেনিসারজিভ আপনার অর্থ কী তা নিশ্চিত নন তবে এটি আমার পক্ষে প্রথমে কার্যকর হয়নি। এবং এটি কারণ আমি ডাবল উক্তি ব্যবহার করছিলাম এবং কেবলমাত্র একক উদ্ধৃতি দিয়ে এই কাজগুলি সক্রিয় করলাম! ম্যাকের টার্মিনালে চেষ্টা করা।
trss

11
স্ট্রিংয়ের ভেরিয়েবলগুলির সাথে সমস্যাগুলি প্রসারিত হচ্ছে না।
উইলিমধ

আপনি এখনও ডাবল-উদ্ধৃতি স্ট্রিংগুলি সংযুক্ত করতে পারেন। oo foo = "বার"; প্রতিধ্বনি $ '' $ foo'efoot'`
কামাফেদার

141

আপনি সবসময় করতে পারে echo ""

যেমন

echo "Hello"
echo ""
echo "World"

6
echo ""আমার জন্য কাজ করে এবং আমি মনে করি এটি একটি নতুন লাইন মুদ্রণের সবচেয়ে সহজ ফর্ম, এমনকি যদি এটি সরাসরি প্রশ্নের উত্তর না দেয়। চিয়ার্স।
মারিও আওয়াদ

2
আমি মনে করি এটি তুলনায় কম স্পষ্ট (এবং সম্ভবত এটি আরও বিভ্রান্তিকর) echo -en "\n"
ডিবেডেনকো

72
echoখালি লাইনটি পাওয়ার জন্য যথেষ্ট
রোমানিয়া_আজ্ঞানী

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;

নিশ্চিত হয়ে নিন যে আপনি ভেরিয়েবলটি পদ্ধতিটি প্রতিধ্বনিত করার আগে কোটের সাথে মুড়ে ফেলেছেন।
ingyhere

23

এটি রাস্পবিয়ান ভাষায় আমার পক্ষে কাজ করে,

echo -e "hello\\nworld"

2
উইন্ডোজ 7-তেও গিটব্যাশ-এ আমার জন্য কাজ করে ;-)
বিগ রিচ

3
একটি একক ব্যাকস্ল্যাশ যথেষ্ট হওয়া উচিত
ফেলিক্স ডি

23

প্রতিধ্বনিতে পজিক্স 7

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

-e সংজ্ঞায়িত হয় না এবং ব্যাকস্ল্যাশগুলি বাস্তবায়ন সংজ্ঞায়িত হয়:

যদি প্রথম অপারেন্ডটি -n হয়, বা যদি কোনও অপারেন্ডে <ব্যাকস্ল্যাশ> অক্ষর থাকে তবে ফলাফলগুলি বাস্তবায়ন-সংজ্ঞায়িত হয়।

আপনার যদি কোনও Xচ্ছিক এক্সএসআই এক্সটেনশন না থাকে।

সুতরাং আমি আপনাকে পরামর্শ দিচ্ছি যে printfপরিবর্তে আপনার ব্যবহার করা উচিত , যা ভালভাবে নির্দিষ্ট করা হয়েছে:

XBD ফাইল ফর্ম্যাট নোটেশন বর্ণিত বিন্যাস স্ট্রিং হিসাবে ফর্ম্যাট অপারেন্ড ব্যবহার করা হবে [...]

ফাইল ফর্ম্যাট স্বরলিপি :

। n <নিউলাইন> মুদ্রণ অবস্থানটি পরবর্তী লাইনের শুরুতে সরান।

এছাড়াও মনে রাখবেন যে উবুন্টু 15.10 এবং বেশিরভাগ ডিস্ট্রো echoউভয় হিসাবে প্রয়োগ করে:

  • অন্তর্নির্মিত একটি বাশ: help echo
  • একক নির্বাহযোগ্য: which echo

যা কিছু বিভ্রান্তির কারণ হতে পারে।


17

কেবল টাইপ করুন

echo

একটি নতুন লাইন পেতে


3
ব্যাপকভাবে আন্ডাররেটেড উত্তর, বিশ্বাস করতে পারবেন না যে এই প্রশ্নটি ২০১১ সাল থেকে ২০+ উত্তর জড়িত করেছে এবং এর মধ্যে একটিতেও এই সহজ সমাধান নেই।
প্রমিথিউস

ওরফে সি = 'প্রতিধ্বনি; প্রতিধ্বনি; প্রতিধ্বনি; প্রতিধ্বনি; প্রতিধ্বনি; প্রতিধ্বনি; প্রতিধ্বনি; প্রতিধ্বনি; প্রতিধ্বনি; প্রতিধ্বনি; প্রতিধ্বনি; প্রতিধ্বনি; প্রতিধ্বনি; প্রতিধ্বনি; প্রতিধ্বনি; প্রতিধ্বনি; প্রতিধ্বনি; প্রতিধ্বনি; প্রতিধ্বনি; প্রতিধ্বনি; প্রতিধ্বনি; প্রতিধ্বনি; প্রতিধ্বনি; প্রতিধ্বনি; প্রতিধ্বনি; প্রতিধ্বনি; প্রতিধ্বনি; প্রতিধ্বনি; প্রতিধ্বনি; প্রতিধ্বনি; প্রতিধ্বনি; প্রতিধ্বনি; প্রতিধ্বনি; প্রতিধ্বনি; প্রতিধ্বনি; প্রতিধ্বনি এই আমি একমাত্র উপায় আমার পর্দা সাফ করতে পারেন, ধন্যবাদ!
আহি টুনা

@ অহি টুনা: দয়া করে এর পরিবর্তে আপনার কনসোল কীবোর্ড শর্টকাটগুলি ব্যবহার করুন :)
আর সান

@ আরএসএন এবং আমি কীভাবে কোনও Chromebook এর ডেবিয়ান টার্মিনাল উইন্ডোতে এটি করব?
আহি টুনা

1
@ অহিতুনা পরিষ্কার; বা সিটিআরএল + এল;
মাইক বীজ

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

এটি প্রকৃতপক্ষে একটি দুর্দান্ত উত্তর যেহেতু এটি স্ট্রিং কনটেন্টেশনের জন্য কাজ করে। গ্রেট!
লাভাস্ক্রোনডওয়ে

1
দ্বিতীয় প্রোগ্রাম শুরু করতে কেন বিরক্ত করবেন? এটি এমন নয় যে আমরা ব্যাশে একটি বাস্তব সময়ের আবেদন লেখার চেষ্টা করছি;) তবে এটি প্রয়োজনীয় নয়।
ফেলিক্স ডি

এটি সত্যিই একটি দুর্দান্ত উত্তর যা যা-ই হোক না কেন সর্বত্র কাজ করা উচিত। আপনি আমার দিনের বন্ধু @ আলিনসোয়ারকে সংরক্ষণ করেছেন
কাশ্যপ


6

আপনি এটি করতে পারেন:

echo "hello
world"

এটি স্ক্রিপ্টের ভিতরে এবং কমান্ড লাইন থেকে উভয়ই কাজ করে।
কমান্ড লাইনে, Shift+ টিপুনEnter স্ট্রিংয়ের ভিতরে লাইনটি বিরতি করতে ।

এটি আমার ম্যাকোস এবং আমার উবুন্টু 18.04 এ আমার জন্য কাজ করে


`nter` চাপলে কমান্ডটি চালানোর জন্য শেল না রেখে আপনি কীভাবে লাইন ব্রেকটি টাইপ করবেন?
Xenos

@ জেনোস এটি একটি স্ক্রিপ্টে ভাল কাজ করে। এবং কনসোলে, অসম্পূর্ণ কমান্ডটি চালানোর জন্য শেলটি এড়াতে নতুন লাইন যুক্ত করতে কেবল শিফট + এন্টার টিপুন।
ভিনজি

5

তাদের জন্য এখানে আরও একটি এন্ট্রি যা এই কোনও সমাধানের সাথে এটি কাজ করে না, এবং তাদের ফাংশন থেকে কোনও ফেরতের মান পাওয়া দরকার:

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

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

এই কৌশলটি একটি লিনাক্সে কাজ করেছিল আমি এই ব্যাশের সাথে কাজ করছি:

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"

আপনি যে লাফটি sertোকাতে চান সেখানে কেবল প্রবেশ করুন hit আউটপুট এখন:

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

4
কেবল একটি নোট, আপনি সম্ভবত আপনার পরিবর্তনশীল নামগুলির আশেপাশে $ {use ব্যবহার করতে চাইবেন কারণ এটি না করা সত্যিই অদ্ভুত আচরণের দিকে পরিচালিত করতে পারে যখন শেলটি $ ওয়ার্নিংফাউন্ড নামে পরিচিত একটি ভেরিয়েবল খুঁজে পায় এবং এটি দুটি পৃথক আউটপুট নয় প্রিন্ট করে।
ড্রাগন 788

@ ড্রাগন 788 হয়তো আমি কিছু মিস করছি, তবে ভেরিয়েবলটি আসলে actually ওয়ার্নিংফাউন্ড?
psynnott

2
আমি একটি শব্দ মিস করেছি। আপনার যদি $ ings ওয়ার্নিংফাউন্ড using ব্যবহার না করে কিছু ক্ষেত্রে $ সতর্কতা বলা যায়, আপনি সম্ভবত পরিবর্তনশীলটির পরিবর্তে Found সতর্কতা + "পাওয়া" বিষয়বস্তু দিয়ে শেষ করতে পারেন।
ড্রাগন 788

3

আপনি বন্ধনী দ্বারা প্রতিধ্বনি ব্যবহার করতে পারেন,

$ (echo hello; echo world)
hello
world

অপ্রত্যাশিত টোকেনের নিকটে সিনট্যাক্স ত্রুটি '(' যখন
.sh

1
চেষ্টা করুনecho hello; echo world
অবিনাশ রাজ

1
বা "প্রতিধ্বনি হ্যালো ও& ইকো ওয়ার্ল্ড" বা ঠিক: "ইকো হ্যালো ইকো ওয়ার্ল্ড
csga5000

3

এটি আরও ভাল হিসাবে করা যেতে পারে

x="\n"
echo -ne $x

-e বিকল্পটি এস্কেপ সিকোয়েন্সের জন্য ব্যাকস্ল্যাশগুলি ব্যাখ্যা করবে
- এন বিকল্পটি আউটপুটটিতে ট্রেলিং করা নতুন লাইনটি সরিয়ে ফেলবে

পিএস: কমান্ড প্রতিধ্বনির ফলাফল সর্বদা আউটপুটে একটি ট্রেলিং নিউলাইন অন্তর্ভুক্ত করে তাই -নাকে সেই জিনিসটি বন্ধ করতে হবে (এবং এটিকে কম বিভ্রান্ত করা উচিত)


প্রতিধ্বনি-প্রশ্নের "হ্যালো wor 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

ব্যাশ প্রোফাইলে (ম্যাকঅক্স, আইটার্ম) উপন্যাস হিসাবে ব্যবহার করার সময় আমাকে পাঠ্যটিকে ডাবল কোট দিয়ে ঘিরে ফেলতে হয়েছিল।

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) যা ভাল আইএমও হওয়া উচিত।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.