প্রতিধ্বনি -e "<স্ট্রিং>" এবং প্রতিধ্বনি between "<স্ট্রিং>" এর মধ্যে পার্থক্য


20

ব্যবহার মধ্যে ডিফেরেন্স কি

echo -e "Hello\nWorld" 

এবং

echo $"Hello\nWorld" 

তারা উভয় আউটপুট না:

Hello
World

1
তুমি কি চেষ্টা করেছ? দ্বিতীয় এক ফলাফল Hello\nWorld-eপালানোর অক্ষরগুলি ব্যাখ্যা করতে আপনার সুইচ দরকার ।
বেকো

4
দ্বিতীয়টির জন্য, আমি সন্দেহ করি যে আপনি এটি একটি একক উদ্ধৃতি দিয়ে লিখতে চেয়েছিলেন echo $'Hello\nWorld', যা বাশের নীচে দুটি লাইনে মুদ্রণ করবে।
1024

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

উত্তর:


33

echo -eএবং echo $'...'উভয় একই হয় যে তারা নীচের অংশীদারি ক্রম সমর্থন:

  \a     alert (bell)
  \b     backspace
  \e
  \E     an escape character
  \f     form feed
  \n     new line
  \r     carriage return
  \t     horizontal tab
  \v     vertical tab
  \\     backslash
  \0nnn  the eight-bit character whose value is the octal value nnn (zero to three octal digits)
  \xHH   the eight-bit character whose value is the hexadecimal value HH (one or two hex digits)
  \uHHHH the Unicode (ISO/IEC 10646) character whose value is the hexadecimal value HHHH (one to four hex digits)
  \UHHHHHHHH
         the Unicode (ISO/IEC 10646) character whose value is the hexadecimal value HHHHHHHH (one to eight hex digits)

তাদের মধ্যে পার্থক্য রয়েছে। উপরেরগুলি ছাড়াও, echo -eসমর্থন করে:

  \c     suppress further output
  \0nnn  the eight-bit character whose value is the octal value nnn (zero to three octal digits)

বিপরীতে, $'....'সমর্থন:

 \'     single quote
 \"     double quote
 \nnn   the eight-bit character whose value is the octal value nnn (one to three digits)
 \cx    a control-x character

লক্ষ্য করুন যে, উভয়ের মধ্যে, \cএক্সটেনশনগুলি বেমানান:

$ echo -e  'start\n\cIstop'
start
$ echo  $'start\n\cIstop'
start
        stop

জন্য echo -eউপরে \cআরও আউটপুট শুষে ফলে উপেক্ষা Istop। বিপরীতে, জন্য $'...', \cIএকটি ট্যাব হিসাবে ব্যাখ্যা করা হয়।

চাক্ষুষ-অনুরূপ ফর্ম: $"..."

এর বিপরীতে $'...', এর কাজটি $"..."বেশ আলাদা। এটি এতে থাকা স্ট্রিংটিকে বর্তমান লোকেল অনুসারে অনুবাদ করতে হবে।

echo -eবিতর্ক

echo -eশেলগুলি সর্বজনীনভাবে সমর্থন করে না এবং অনেকে -eবিকল্পটিকে ডিজাইনের ভুল হিসাবে বিবেচনা করে । পালন:

$ ls
-e  -n
$ echo *
$ printf "%s\n" *
-e
-n

আপনি দেখতে পাচ্ছেন, আপনি যা মুদ্রণ করছেন তা যদি echoকোনও ড্যাশ দিয়ে শুরু হয় তবে ফলাফলটি অপ্রত্যাশিত হতে পারে। আপনি নিশ্চিত না হন যে আপনি যে প্রথম স্ট্রিংটি মুদ্রণ echoকরবেন তা কোনও ড্যাশ দিয়ে শুরু হবে না, আপনি সম্ভবত ব্যবহার করা ভাল printf

এই কারণে, পসিক্স মানটি শেষ করে :

নতুন অ্যাপ্লিকেশনগুলি প্রতিধ্বনির পরিবর্তে প্রিন্টফ ব্যবহার করতে উত্সাহিত করা হয়।

চিট রেমি, যিনি bashগত 22 বছর ধরে রক্ষণ করেছেন , সম্মত হন :

[এন] ই কোড কোড প্রিন্টফ ব্যবহার করা উচিত।


1
এছাড়াও টুকুনি উভয় Chet এবং POSIX ব্যবহার করার প্রস্তাব printfবদলেecho
geirha

@geirha খুব ভাল পয়েন্ট। উত্তর আপডেট হয়েছে।
1024

1
গ্লোবগুলি (পছন্দ মতো *) থেকে অপ্রত্যাশিত বিকল্পগুলির সমস্যাটি আসলে সুনির্দিষ্ট নয় echo। এটি এমন কোনও কমান্ডের সাথে ঘটে যা সংক্ষিপ্ত বা দীর্ঘ বিকল্পগুলি স্বীকৃতি দেয় (প্রচলিত পদ্ধতিতে লিখিত) এবং ফাইল নাম অপারেন্ডস সহls , গ্রহণ করে । যুক্তিযুক্তভাবে পরিস্থিতি কিছুটা খারাপ echoকারণ যেহেতু (আপনার উত্স হিসাবে উল্লেখ করা হয়েছে) echoসাধারণত --বিকল্পগুলির সমাপ্তি নির্দেশ করতে স্বীকৃতি দেয় না , যেখানে কেউ কমান্ড লিখতে পারে ls -- *l। (এবং সত্যিই কোনও কমান্ডগুলি সাধারণত সেইভাবে লেখা উচিত, যখন গ্লোবগুলি শুরু হয় *বা -বিশেষত স্ক্রিপ্টগুলিতে ব্যবহার করা হয়))
এলিয়াহ কাগন

পুঙ্খানুপুঙ্খ উত্তরের জন্য ধন্যবাদ, আমি অবশ্যই আমার অপারেটিং সিস্টেম একটি excercise আছে এবং আমি ব্যবহার কিছু টেক্সট প্রিন্ট আউট করা প্রয়োজন \nপালাবার ক্রম, তাই এটি আসলে ব্যাপার যদি আমি ব্যবহার করে না echo -e '...', echo $'...'অথবাecho $"..."
মার্ক
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.