উত্তর:
echo -e ' \t '
'স্পেস ট্যাব স্পেস নিউলাইন' প্রতিধ্বনিত করবে (এর -e
অর্থ 'ব্যাকস্ল্যাশ পলায়নের ব্যাখ্যা সক্ষম করুন'):
$ echo -e ' \t ' | hexdump -C
00000000 20 09 20 0a | . .|
echo -e
মেকফিল থেকে কেন কাজ হয় না?
echo -e
এটি পসিক্স এবং make
কলগুলি নয় /bin/sh
যা সাধারণত প্রোগ্রামটি ইন্টারেক্টিভভাবে ব্যবহার করে না এবং সাধারণত -e
কার্যকর হয় না । বহনযোগ্যতার জন্য, printf '\t'
পরিবর্তে ব্যবহার করুন।
man
পৃষ্ঠাটিতে echo
বিকল্পটি উল্লেখ করা হয়নি -e
। যাইহোক, এই বিকল্পটি গ্রহণ করা হয়।
ব্যবহার printf
, না echo
।
echo
কমান্ডের একাধিক বিভিন্ন সংস্করণ রয়েছে । আছে /bin/echo
(যা হতে পারে অথবা গনুহ Coreutils সংস্করণ নাও হতে পারে, সিস্টেম উপর নির্ভর করে), এবং echo
কমান্ড সবচেয়ে শাঁস বিল্ট ইন থাকে। নিয়ন্ত্রণের অক্ষরের জন্য পলায়নগুলি নির্দিষ্ট করতে বা অক্ষম করার জন্য বিভিন্ন সংস্করণে বিভিন্ন উপায়ে (বা কোনও উপায় নেই)।
printf
অন্যদিকে, এর পার্থক্য অনেক কম। এটি একটি কমান্ড হিসাবে উপস্থিত থাকতে পারে, সাধারণত /bin/printf
, এবং এটি কয়েকটি শাঁস (ব্যাশ এবং zsh এটি আছে, tcsh এবং ksh না) মধ্যে নির্মিত হয়েছে, তবে বিভিন্ন সংস্করণগুলির বিভিন্ন সংস্করণগুলির চেয়ে একে অপরের সাথে অনেক বেশি মিল echo
রয়েছে। এবং আপনাকে কমান্ড-লাইন বিকল্পগুলি মনে রাখতে হবে না (কয়েকটি ব্যতিক্রম সহ; জিএনইউ কোরিটিলস প্রিন্টফ গ্রহণ করে --version
এবং --help
, এবং বিল্ট-ইন বাশ প্রিন্টফ -v var
আউটপুটটিকে একটি ভেরিয়েবলের মধ্যে সঞ্চয় করতে গ্রহণ করে)।
আপনার উদাহরণের জন্য:
res=' 'x # res = "\t\tx"
printf '%s\n' "[$res]"
এবং এখন আমার পক্ষে স্বীকার করার সময় এসেছে যে echo
আপনি যেমন উদাহরণ হিসাবে জিজ্ঞাসা করছেন ঠিক তেমন কাজ করবে; আপনার কেবলমাত্র যুক্তির চারপাশে ডাবল উদ্ধৃতি দেওয়া দরকার:
echo "[$res]"
কিমিপ্যাপ্লান যেমন লিখেছিল (আড়াই বছর আগে, আমি কেবল লক্ষ্য করেছি!)। আপনার মূল আদেশগুলি নিয়ে সমস্যা:
res=' 'x # res = "\t\tx"
echo '['$res']' # expect [\t\tx]
সাথে নেই echo
; এটি শেলটি এটি দেখার আগে কোনও স্থানের সাথে ট্যাবটি প্রতিস্থাপন করেছিল echo
।
echo
যেমন সহজ আউটপুট জন্য জরিমানা echo hello world
, আপনি printf
যখনই আরও জটিল কিছু করতে চান আপনি ব্যবহার করা উচিত । আপনি কাজ করতে পারেন echo
, তবে আপনি যখন অন্য কোনও echo
বাস্তবায়ন বা অন্য কোনও শেল দিয়ে চালাবেন তখন ফলাফল কোডটি ব্যর্থ হতে পারে ।
আপনিও চেষ্টা করতে পারেন:
echo Hello$'\t'world.
বাশ ম্যান পৃষ্ঠা থেকে:
ফর্মের শব্দগুলি 'স্ট্রিং' বিশেষভাবে চিকিত্সা করা হয়। শব্দটি স্ট্রিংয়ে প্রসারিত হয়, এএনএসআই সি স্ট্যান্ডার্ড অনুসারে ব্যাকস্ল্যাশ-পলায়নযুক্ত অক্ষর প্রতিস্থাপন করা হয়েছিল।
সুতরাং আপনি এটি করতে পারেন:
echo $'hello\tworld'
ব্যবহার করুন ধারণকৃত কীস্ট্রোক, ^V
( CTRL+V
, C-v
, যাই হোক না কেন )।
আপনি যখন টাইপ করুন ^V
টার্মিনালটিতে করেন (বা বেশিরভাগ ইউনিক্স সম্পাদকদের মধ্যে), নিম্নলিখিত অক্ষরটি ভারব্যাটিম নেওয়া হয় । আপনি প্রতিধ্বনিত স্ট্রিংয়ের অভ্যন্তরে আক্ষরিক ট্যাব অক্ষরটি টাইপ করতে এটি ব্যবহার করতে পারেন।
নিম্নলিখিত কাজগুলির মতো কিছু:
echo "^V<tab>" # CTRL+V, TAB
দস্তাবেজ দস্তাবেজ ( কিউভি , "উদ্ধৃত-সন্নিবেশ")
উদ্ধৃত-সন্নিবেশ (সিকিউরিটি, সিভি) পরবর্তী অক্ষরটি আপনি টাইপ করুন যা লাইন ভার্ব্যাটিমে টাইপ করুন। উদাহরণস্বরূপ, কীভাবে কী সিকোয়েন্সগুলি সন্নিবেশ করা যায়।
পার্শ্ব নোট: এই অনুযায়ী, ALT+TAB
একই জিনিস করা উচিত, কিন্তু আমরা সবাই উইন্ডো স্যুইচিংয়ের সাথে এই অনুক্রমটি আবদ্ধ করেছি যাতে আমরা এটি ব্যবহার করতে পারি না
ট্যাব-সন্নিবেশ (এম-টিএবি) একটি ট্যাব অক্ষর .োকান।
-
দ্রষ্টব্য: আপনি এই কৌশলটি সব ধরণের অস্বাভাবিক চরিত্রের সাথে ব্যবহার করতে পারেন। গাড়ীর ফেরতের মতো:
echo "^V^M" # CTRL+V, CTRL+M
এর কারণ হ'ল গাড়ীর রিটার্ন ASCII 13, এবং এম বর্ণমালার 13 তম বর্ণ, সুতরাং আপনি যখন টাইপ করবেন তখন আপনি ^M
13 তম ASCII অক্ষর পাবেন। আপনি এটি ls^M
খালি প্রম্পটে ব্যবহার করে ক্রিয়াকলাপে দেখতে পাচ্ছেন , যা একটি ক্যারেজ রিটার্ন সন্নিবেশ করবে, প্রম্পটটি যেমন আপনি ফিরে আসবেন ঠিক তেমনভাবে কাজ করবে। যখন এই চরিত্রগুলি সাধারণত ব্যাখ্যা করা হয়, তখন ভারব্যাটিম আপনাকে আক্ষরিক চরিত্রটি পেতে দেয়।
grep
অক্ষরযুক্ত লাইন ধরার জন্য ব্যবহার করার চেষ্টা করার সময় এবং আমার দিনটি সংরক্ষণ করেছিল tab
।
ভেরিয়েবলের মান মুদ্রণের জন্য প্রতিধ্বনি ব্যবহার করা একটি সাধারণ ব্যাশের ক্ষতি হয়। রেফারেন্স লিঙ্ক: