सही स्पष्टीकरण पहले से ही jsbillings और geekosaur द्वारा दिया गया है , लेकिन मुझे उस पर थोड़ा विस्तार करना चाहिए।
अधिकांश गोले में, बैश सहित, एक पाइप लाइन का प्रत्येक भाग एक उप-भाग में चलता है, इसलिए शेल की आंतरिक स्थिति में परिवर्तन (जैसे चर सेट करना) पाइप लाइन के उस खंड तक ही सीमित रहता है। केवल एक जानकारी जो आप एक उपधारा से प्राप्त कर सकते हैं वह यह है कि यह आउटपुट (मानक आउटपुट और अन्य फ़ाइल डिस्क्रिप्टर के लिए) और इसका निकास कोड (जो 0 और 255 के बीच की संख्या है)। उदाहरण के लिए, निम्नलिखित स्निपेट प्रिंट 0:
a=0; a=1 | a=2; echo $a
Ksh में (AT & T कोड से व्युत्पन्न वेरिएंट, pdksh / mksh वेरिएंट नहीं) और zsh, पाइप लाइन में अंतिम आइटम को पेरेंट शेल में निष्पादित किया जाता है। (POSIX दोनों व्यवहारों की अनुमति देता है।) तो प्रिंट 2 से ऊपर का स्निपेट।
एक उपयोगी मुहावरे में लूप की निरंतरता को शामिल करना है (या आपके पास पाइप लाइन के दाईं ओर जो कुछ भी है, लेकिन पाइपलाइन में थोड़ी देर का लूप वास्तव में यहां आम है):
cat junk | {
while read var ; do x=55 ; done
echo x=$x
}