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