इस तरह से लूप को फिर से देखने से पता चलता है कि क्या हो रहा है:
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यहाँ एक लूप होना वास्तव में कुछ भी पूरा नहीं कर रहा है। readBuiltin खाली स्थान के अलग पाठ पढ़ता 1 प्रत्येक निर्दिष्ट चर में। निर्दिष्ट अंतिम चर के अंत में अतिरिक्त इनपुट जुड़ जाता है। 2 इस प्रकार चर aऔर bमूल्यों पर 1और 2क्रमशः लेते हैं, जबकि cमूल्य पर ले जाता है 3 4 5 6।
जब while read a b cदूसरी बार लूप की स्थिति ( ) का मूल्यांकन किया जाता है, तो पाइप से अधिक इनपुट उपलब्ध नहीं होता है (हमने केवल इसे पाठ की एक पंक्ति प्रदान की है), इसलिए readकमांड सही के बजाय गलत का मूल्यांकन करता है और लूप बंद हो जाता है (कभी भी निष्पादित करने से पहले) शरीर दूसरी बार)।
1 : तकनीकी और विशिष्ट होना करने के लिए, निर्मित , जब तर्कों के रूप चर नाम पारित कर दिया, इनपुट, पढ़ता अलग "शब्दों" में विभाजित जब यह मुठभेड़ों आईएफएस खाली स्थान के (यह भी देखें इस सवाल और इस लेख )।read
2 : readनिर्दिष्ट अंतिम चर में इनपुट के किसी भी अतिरिक्त क्षेत्रों को जाम करने का व्यवहार कई स्क्रिप्टर्स के लिए गैर-संकेत है, पहली बार में। यह समझना आसान हो जाता है जब आप उस पर विचार करते हैं, जैसा कि फ्लोरियन डिस्च का जवाब कहता है , readहमेशा (पूरी कोशिश करेंगे) एक पूरी पंक्ति पढ़े - और readइसका उद्देश्य लूप के साथ और उसके बिना उपयोग करने योग्य है।