echo
echoসিঙ্গেল ইউনিক্সের নির্দিষ্টকরণের সাথে কঠোরভাবে মেনে চলে এমন একটি বাস্তবায়ন যদি আপনি এটি করেন তবে নতুন লাইন যুক্ত করবে:
echo 'line1\nline2'
তবে এটি নির্ভরযোগ্য আচরণ নয়। আসলে, সত্যিই নয় কোনো মান আচরণ যা তোমাদের আশা করতে পারেন echo।
OPERANDS
string
স্ট্যান্ডার্ড স্ট্যান্ডার্ড আউটপুট লিখতে হবে। যদি প্রথম অপারেন্ড হয় -n, বা যদি কোনও অপারেন্ডে < \ব্যাকস্ল্যাশ> অক্ষর থাকে তবে ফলাফলগুলি বাস্তবায়ন-সংজ্ঞায়িত হয় ।
উপর XSI-conformant সিস্টেম, যদি প্রথম প্রতীক হয় -n, এটি একটি স্ট্রিং, হিসাবে গণ্য হইবে না একটি বিকল্প । নিম্নলিখিত অক্ষরের অনুক্রমগুলি যে কোনও আর্গুমেন্টের মধ্যে এক্সএসআই-কনফর্মেন্ট সিস্টেমগুলিতে স্বীকৃত হবে:
\a- একটি <ক্যালার্ট> লিখুন ।
\b- একটি <ব্যাকস্পেস> লিখুন ।
\c- অন্যথায় আউটপুটে চূড়ান্ত যুক্তি অনুসরণ করে এমন <নিউলাইন> টিপুন । \cযুক্তি অনুসারে নিম্নলিখিত সমস্ত অক্ষর উপেক্ষা করা হবে।
\f- একটি <for-feed> লিখুন ।
\n- একটি <নিউলাইন> লিখুন ।
\r- একটি <ক্যারেজ- পুনর্বার> লিখুন ।
\t- একটি <ট্যাব> লিখুন ।
\v- একটি <versical-tab> লিখুন ।
\\- একটি <ব্যাকস্ল্যাশ> অক্ষর লিখুন ।
\0num- একটি 8-বিট মান লিখুন যা শূন্য, এক, দুই, বা তিন-অঙ্কের অক্টাল সংখ্যা num।
এবং সুতরাং কীভাবে একটি নতুন লাইন লিখতে হবে তা জানার কোনও সাধারণ উপায় echoনেই, কেবলমাত্র আপনি কেবল এটি করার echoজন্য নির্ভর করতে পারেন।
একটি bashশেল সাধারণত স্পেসিফিকেশনটির সাথে সামঞ্জস্য করে না এবং -nএবং অন্যান্য বিকল্পগুলি পরিচালনা করে তবে এটি অনিশ্চিত। আপনি করতে পারেন:
shopt -s xpg_echo
echo hey\\nthere
hey
there
এবং এমনকি এটি প্রয়োজনীয় নয় যদি bashবিল্ড-টাইম বিকল্পের সাথে নির্মিত হয় ...
--enable-xpg-echo-default
করুন echobuiltin ডিফল্টরূপে ব্যাকস্ল্যাশ-পলান অক্ষর প্রসারিত করবে, প্রয়োজন ছাড়া -eবিকল্প। এই সেট ডিফল্ট মান xpg_echoথেকে শেল বিকল্প on, যা ব্যাশ তোলে echoআরো সংস্করণ একক ইউনিক্স স্পেসিফিকেশন উল্লেখিত, সংস্করণ 3. দেখুন মত আচরণ ব্যাশ Builtins , পালাবার ক্রম যে বর্ণনার জন্য echoস্বীকার করে।
printf
অন্যদিকে, printfআচরণের তুলনায় তুলনামূলকভাবে বেশ কার্যকর।
যুক্তিসহ ব্যাখ্যা
printfউপযোগ ঐতিহাসিকভাবে দ্বারা উপলব্ধ করা হয়েছে কার্যকারিতা প্রদান যোগ করা হয়েছিল echo। তবে, প্রচলিত বিভিন্ন সংস্করণে অপরিবর্তনীয় পার্থক্যের কারণে echoসংস্করণটির কয়েকটি বিশেষ বৈশিষ্ট্য রয়েছে printfযা সেটিকে নতুন এই ইউটিলিটিতে রেখে যায় , যা নবম সংস্করণ সিস্টেমে একটির উপর নির্ভরশীল।
এক্সটেন্ডেড বর্ণনার বিভাগটি printf()আইএসও সি স্ট্যান্ডার্ডে ফাংশনটির সাথে প্রায় হুবহু মিলে যায় , যদিও এটি এক্সবিডি ফাইল ফর্ম্যাট নোটেশনে ফাইল ফর্ম্যাট নোটেশনের ক্ষেত্রে বর্ণিত হয়েছে ।
এটি ফর্ম্যাট স্ট্রিংগুলি পরিচালনা করে যা এর আর্গুমেন্টগুলি বর্ণনা করে - যা কোনও সংখ্যক জিনিস হতে পারে তবে স্ট্রিংগুলির জন্য %byte স্ট্রিং বা আক্ষরিক %sট্রিংগুলি বেশ সুন্দর । %fপ্রথম আর্গুমেন্টের বিন্যাসগুলি ব্যতীত , এটি বেশিরভাগ %bইটি স্ট্রিং আর্গুমেন্টের মতো আচরণ করে , ব্যতীত এটি \cপালানোর বিষয়টি পরিচালনা করে না।
printf ^%b%s$ '\n' '\n' '\t' '\t'
^
\n$^ \t$
দেখুন কেন এর printfচেয়ে ভাল echo? আরো বেশী.
echo() printf
আপনি নিজের মান echoমত লেখে ...
echo(){
printf '%b ' "$@\n\c"
}
... যা সবসময় সঠিকভাবে স্বয়ংক্রিয়ভাবে করা উচিত।
প্রকৃতপক্ষে, না ... \nএটি শেষ যুক্তিটি যদি একটি বিজোড় সংখ্যায় <ব্যাকস্ল্যাশেস> এ শেষ হয় তবে আর্গুমেন্টগুলির লেজে একটি আক্ষরিক প্রিন্ট করে ।
তবে এটি করে না:
echo()
case ${IFS- } in
(\ *) printf %b\\n "$*";;
(*) IFS=\ $IFS
printf %b\\n "$*"
IFS=${IFS#?}
esac
echoবাধ্যতামূলক? আপনি ব্যবহার করতে পারেনprintf।