আশ্চর্যজনকভাবে, মানুষের পাঠযোগ্য আউটপুট দেওয়ার জন্য কম্পিউটার পাওয়া সহজ কীর্তি নয়। স্ট্যান্ডার্ড স্ট্রীম এবং বিশেষভাবে স্ট্যান্ডার্ড আউটপুট প্রবর্তনের সাথে, প্রোগ্রামগুলি প্লেইন টেক্সট স্ট্রীম ব্যবহার করে একে অপরের সাথে কথা বলার একটি উপায় অর্জন করেছে। কিন্তু মানবীকরণ এবং stdout প্রদর্শন করা অন্য বিষয়। ভিডিও কম্পিউটার ডিসপ্লেতে ASCII অক্ষরের ব্যবহার থেকে শুরু করে echo
-এর মতো আধুনিক শেল কমান্ড পর্যন্ত কম্পিউটিং যুগ জুড়ে প্রযুক্তি এই সমস্যার সমাধান করার চেষ্টা করেছে। এবং printf
.
এই অগ্রগতি বিরামহীন ছিল না. একটি টার্মিনালে আউটপুট প্রিন্ট করার কাজটি প্রোগ্রামারদের নেভিগেট করার জন্য ছন্দে পরিপূর্ণ, যেমনটি নতুন লাইন প্রিন্ট করার জন্য একটি এস্কেপ সিকোয়েন্স প্রসারিত করার প্রতারণামূলকভাবে অতুচ্ছ কাজের দ্বারা উদাহরণ দেওয়া হয়েছে। স্থানধারক \n
এর বিস্তার বিভিন্ন উপায়ে সম্পন্ন করা যেতে পারে, প্রত্যেকটির নিজস্ব অনন্য ইতিহাস এবং জটিলতা রয়েছে।
echo
ব্যবহার করা
মাল্টিক্সে এর উপস্থিতি থেকে শুরু করে আধুনিক যুগের ইউনিক্সের মতো সিস্টেম সর্বব্যাপী, echo
"হ্যালো ওয়ার্ল্ড!" বলার জন্য আপনার টার্মিনাল পাওয়ার জন্য একটি পরিচিত হাতিয়ার রয়ে গেছে। দুর্ভাগ্যবশত, অপারেটিং সিস্টেম জুড়ে অসামঞ্জস্যপূর্ণ বাস্তবায়ন এর ব্যবহারকে জটিল করে তোলে। যেখানে echo
কিছু সিস্টেমে স্বয়ংক্রিয়ভাবে এস্কেপ সিকোয়েন্স প্রসারিত হবে, অন্যদের একটি -e
প্রয়োজন একই কাজ করার বিকল্প:
echo "the study of European nerves is \neurology"
# the study of European nerves is \neurology
echo -e "the study of European nerves is \neurology"
# the study of European nerves is
# eurology
বাস্তবায়নে এই অসঙ্গতির কারণে, echo
অ-পোর্টেবল বলে মনে করা হয়। অতিরিক্তভাবে, ব্যবহারকারীর ইনপুটের সাথে এর ব্যবহার কমান্ড প্রতিস্থাপন ব্যবহার করে শেল ইনজেকশন আক্রমণের মাধ্যমে দূষিত করা তুলনামূলকভাবে সহজ।
আধুনিক সিস্টেমে, এটি শুধুমাত্র অনেক প্রোগ্রামের সাথে সামঞ্জস্য প্রদান করার জন্য রাখা হয় যা এখনও এটি ব্যবহার করে। POSIX স্পেসিফিকেশন printf
ব্যবহারের সুপারিশ করে নতুন প্রোগ্রামে।
printf
ব্যবহার করা
ইউনিক্সের ৪র্থ সংস্করণ থেকে, পোর্টেবল printf
কমান্ডটি মূলত নতুন এবং ভাল echo
হয়েছে . এটি আপনাকে ইনপুট মানবীকরণের জন্য বিন্যাস নির্দিষ্টকরণ ব্যবহার করার অনুমতি দেয়। ব্যাকস্ল্যাশ এস্কেপ সিকোয়েন্স ব্যাখ্যা করতে, %b
ব্যবহার করুন . অক্ষরের ক্রম \n
নিশ্চিত করে আউটপুট একটি নতুন লাইন দিয়ে শেষ হয়:
printf "%b\n" "Many females in Oble are \noblewomen"
# Many females in Oble are
# oblewomen
যদিও printf
আরও বিকল্প রয়েছে যা এটিকে echo
এর আরও শক্তিশালী প্রতিস্থাপন করে , এই ইউটিলিটি নির্বোধ নয় এবং একটি অনিয়ন্ত্রিত বিন্যাস স্ট্রিং আক্রমণের জন্য ঝুঁকিপূর্ণ হতে পারে। প্রোগ্রামারদের জন্য এটা গুরুত্বপূর্ণ যে তারা সতর্কতার সাথে ব্যবহারকারীর ইনপুট পরিচালনা করে।
ভেরিয়েবলে নতুন লাইন বসানো
কম্পাইলারদের মধ্যে বহনযোগ্যতা উন্নত করার প্রয়াসে, ANSI C স্ট্যান্ডার্ড 1983 সালে প্রতিষ্ঠিত হয়েছিল। $'...'
ব্যবহার করে ANSI-C উদ্ধৃতি দিয়ে , এস্কেপ সিকোয়েন্সগুলি স্ট্যান্ডার্ড অনুযায়ী আউটপুটে প্রতিস্থাপিত হয়।
এটি আমাদেরকে নতুন লাইনের সাথে স্ট্রিংগুলিকে ভেরিয়েবলে সংরক্ষণ করতে দেয় যা নতুন লাইনের ব্যাখ্যা দিয়ে মুদ্রিত হয়। আপনি পরিবর্তনশীল সেট করে এটি করতে পারেন, তারপর এটিকে printf
দিয়ে কল করুন $
ব্যবহার করে :
puns=$'\number\narrow\nether\nice'
printf "%b\n" "These words started with n but don't make $puns"
# These words started with n but don't make
# umber
# arrow
# ether
# ice
প্রসারিত ভেরিয়েবলটি একক-উদ্ধৃত, যা আক্ষরিক অর্থে printf
-এ পাস করা হয় . বরাবরের মতো, ইনপুটটি সঠিকভাবে পরিচালনা করা গুরুত্বপূর্ণ৷
বোনাস রাউন্ড:শেল প্যারামিটার সম্প্রসারণ
আমার নিবন্ধে ব্যাশ এবং ধনুর্বন্ধনী ব্যাখ্যা করে, আমি শেল প্যারামিটার সম্প্রসারণের যাদুটি কভার করেছি। আমরা একটি সম্প্রসারণ ব্যবহার করতে পারি, ${parameter@operator}
, পালানোর ক্রম ব্যাখ্যা করতে, খুব. আমরা printf
ব্যবহার করি এর %s
একটি স্ট্রিং হিসাবে প্রিন্ট করার জন্য স্পেসিফায়ার, এবং E
অপারেটর সঠিকভাবে আমাদের ভেরিয়েবলে এস্কেপ সিকোয়েন্সগুলিকে প্রসারিত করবে:
printf "%s\n" ${puns@E}
# umber
# arrow
# ether
# ice
মানুষের মধ্যে কথা বলার চলমান চ্যালেঞ্জ
স্ট্রিং ইন্টারপোলেশন প্রোগ্রামারদের জন্য একটি চিউই সমস্যা হতে চলেছে। নির্দিষ্ট স্থানধারক বলতে কী বোঝায় সে বিষয়ে একমত হওয়ার জন্য ভাষা এবং শেল পাওয়ার পাশাপাশি, সঠিকভাবে এস্কেপ সিকোয়েন্স ব্যবহার করার জন্য বিশদটির জন্য নজর দেওয়া প্রয়োজন।
দুর্বল স্ট্রিং ইন্টারপোলেশন মূর্খ-দেখানো আউটপুটের দিকে নিয়ে যেতে পারে, সেইসাথে নিরাপত্তার দুর্বলতার পরিচয় দিতে পারে, যেমন ইনজেকশন আক্রমণ থেকে। টার্মিনালের পরবর্তী বিবর্তন না হওয়া পর্যন্ত আমরা ইমোজিতে কথা বলি, মানুষের জন্য আউটপুট প্রিন্ট করার সময় আমরা সর্বোত্তম মনোযোগ দেব।