এইভাবে লুপটি পুনরায় লেখালেখি ঘটে যা ঘটছে তা প্রকাশ করে:
echo '1 2 3 4 5 6' | while read a b c
do
echo '(iteration beginning)' a="$a" b="$b" c="$c" '(iteration ending)'
done
এটি তার ফলাফল হিসাবে দেয়:
(iteration beginning) a=1 b=2 c=3 4 5 6 (iteration ending)
প্রথমে লক্ষ্য করুন যে কেবল একটি একক কমান্ড চালানো হয়েছে। যদি এটি একাধিকবার চালিত হয় তবে আপনি অন্যান্য বিষয়গুলির মধ্যেও একবার (iteration beginning)এবং (iteration ending)একাধিকবার মুদ্রিত সাবস্ট্রিংগুলি দেখতে পাবেন ।
এটি whileএখানে লুপ থাকা সত্যই কোনও কাজ সম্পাদন করে না বলে lish readBuiltin হোয়াইটস্পেস বিভাজিত পাঠ্য সার্চ 1 প্রতিটি নির্দিষ্ট পরিবর্তনশীল মধ্যে। অতিরিক্ত ইনপুট নির্দিষ্ট করা শেষ ভেরিয়েবলের শেষে যুক্ত হয়। 2 সুতরাং ভেরিয়েবলগুলি aএবং bমানগুলি গ্রহণ করে 1এবং 2যথাক্রমে মানগুলি cগ্রহণ করে 3 4 5 6।
যখন লুপ শর্তটি ( while read a b c) দ্বিতীয়বার মূল্যায়ন করা হয়, পাইপ থেকে আর কোনও ইনপুট পাওয়া যায় না (আমরা কেবল এটি পাঠ্যর একক লাইন পাইপ করেছি), সুতরাং readকমান্ডটি সত্যের পরিবর্তে মিথ্যাতে মূল্যায়ন করে এবং লুপটি বন্ধ হয়ে যায় (কখনও কখনও কার্যকর করার আগে) শরীর দ্বিতীয়বার)।
1 : কারিগরী এবং নির্দিষ্ট হবে, builtin যখন আর্গুমেন্ট হিসাবে পরিবর্তনশীল নামের পাস, ইনপুট, সার্চ পৃথক "শব্দ" সেটিকে বিভাজন যখন এটি সম্মুখ IFS হোয়াইটস্পেস (এছাড়াও দেখুন এই প্রশ্নের এবং এই নিবন্ধটি )।read
2 : readনির্দিষ্ট করা শেষ ভেরিয়েবলের ইনপুটগুলির কোনও অতিরিক্ত ক্ষেত্র জ্যাম করার আচরণ প্রথমে অনেকগুলি স্ক্রিপ্টারের কাছে অপ্রয়োজনীয়। এটি বোঝা সহজ হয়ে যখন আপনি যে বিবেচনা, যেমন ফ্লোরিয়ান Diesch এর উত্তর বলে , readসবসময় হবে একটি সম্পূর্ণ লাইন পড়ুন (চেষ্টা) - এবং যে readউভয় সঙ্গে এবং একটি লুপ ছাড়া ব্যবহারযোগ্য হতে উদ্দেশ্যে করা হয়।