পাঠ্য ফাইলটি আক্ষরিকভাবে পড়তে, সরল ব্যবহার করবেন না read
, যা আউটপুটটিকে দুটি উপায়ে প্রক্রিয়া করে:
read
\
একটি পলায়ন চরিত্র হিসাবে ব্যাখ্যা ; read -r
এটি বন্ধ করতে ব্যবহার করুন ।
read
অক্ষরগুলিতে শব্দগুলিতে বিভক্ত $IFS
; IFS
এটি বন্ধ করতে খালি স্ট্রিংয়ে সেট করুন ।
লাইন দ্বারা একটি পাঠ্য ফাইল লাইন প্রক্রিয়া করার জন্য সাধারণ প্রতিমাটি
while IFS= read -r line; do …
এই প্রবাদটির ব্যাখ্যার জন্য দেখুন কেন এর while IFS= read
পরিবর্তে এত ঘন ঘন ব্যবহার করা হয় IFS=; while read..
? ।
আক্ষরিকভাবে একটি স্ট্রিং লিখতে, কেবল প্লেইন ব্যবহার করবেন না echo
, যা স্ট্রিংকে দুটি উপায়ে প্রক্রিয়া করে:
- কিছু শেলের উপর,
echo
প্রক্রিয়া ব্যাকস্ল্যাশ পালাতে পারে। (বাশ এ, এটি xpg_echo
বিকল্প সেট করা আছে কিনা তা নির্ভর করে ))
- কয়েকটি স্ট্রিংকে বিকল্প হিসাবে বিবেচনা করা হয়, যেমন
-n
বা -e
(সঠিক সেটটি শেলের উপর নির্ভর করে)।
একটি স্ট্রিং আক্ষরিক মুদ্রণ একটি পোর্টেবল পথ সঙ্গে হয় printf
। (ব্যাশের আর কোনও ভাল উপায় নেই, যদি না আপনি জানেন যে আপনার ইনপুট কোনও বিকল্পের মতো দেখায় না echo
)) সঠিক স্ট্রিংটি মুদ্রণের জন্য প্রথম ফর্মটি এবং যদি আপনি কোনও নতুন লাইন যুক্ত করতে চান তবে দ্বিতীয় ফর্মটি ব্যবহার করুন।
printf %s "$line"
printf '%s\n' "$line"
এটি কেবল পাঠ্য প্রক্রিয়াকরণের জন্য উপযুক্ত , কারণ:
- বেশিরভাগ শেল ইনপুটটিতে নাল অক্ষরগুলিকে দম বন্ধ করবে।
- আপনি যখন শেষ পংক্তিটি পড়েছেন, শেষের দিকে একটি নতুন লাইন ছিল কিনা তা আপনার জানার কোনও উপায় নেই। (কোনও নতুন লাইনের সাথে ইনপুটটি শেষ না হলে কিছু পুরানো শেলের আরও বড় সমস্যা হতে পারে))
আপনি শেলটিতে বাইনারি ডেটা প্রক্রিয়া করতে পারবেন না, তবে বেশিরভাগ ইউনিটে ইউটিলিটির আধুনিক সংস্করণগুলি স্বেচ্ছাসেবী ডেটাগুলির সাথে মানিয়ে নিতে পারে। আউটপুট থেকে সমস্ত ইনপুট পাস করতে, ব্যবহার করুন cat
। স্পর্শকাতর হয়ে যাওয়া, echo -n ''
কিছু না করার একটি জটিল এবং অ-বহনযোগ্য উপায়; echo -n
ঠিক তেমনই ভাল হবে (বা শেলের উপর নির্ভর করে না), এবং :
সহজ এবং সম্পূর্ণ পোর্টেবল।
: >| "$file"
cat >>"$file"
বা, সহজ,
cat >|"$file"
একটি স্ক্রিপ্ট, আপনি সাধারণত ব্যবহার করতে প্রয়োজন হবে না >|
যেহেতু noclobber
ডিফল্ট ভাবে বন্ধ আছে।