#!/bin/sh
echo "hello world" | read var1 var2
echo $var1
echo $var2
कोई उत्पादन नहीं करता है क्योंकि पाइपलाइनें अपने प्रत्येक घटकों को सबहेल के अंदर चलाती हैं। उन्हें साझा करने के बजाय, मूल शैल के चर के सब्सक्रिप्शन प्रतियां प्राप्त करें । इसे इस्तेमाल करे:
#!/bin/sh
foo="contents of shell variable foo"
echo $foo
(
echo $foo
foo="foo contents modified"
echo $foo
)
echo $foo
कोष्ठक कोड के एक क्षेत्र को परिभाषित करते हैं जो एक सबहेल में चलाया जाता है, और $ foo उनके अंदर संशोधित होने के बाद अपने मूल मूल्य को बरकरार रखता है।
अब इसे आज़माएं:
#!/bin/sh
foo="contents of shell variable foo"
echo $foo
{
echo $foo
foo="foo contents modified"
echo $foo
}
echo $foo
ब्रेसिज़ पूरी तरह से समूह के लिए हैं, कोई सबहेल नहीं बनाया गया है, और ब्रेसिज़ के अंदर संशोधित $ foo वही $ foo उनके बाहर संशोधित है।
अब इसे आज़माएं:
#!/bin/sh
echo "hello world" | {
read var1 var2
echo $var1
echo $var2
}
echo $var1
echo $var2
ब्रेसिज़ के अंदर, रीड बिल्टिन $ var1 और $ var2 को ठीक से बनाता है और आप देख सकते हैं कि वे प्रतिबिंबित हो जाते हैं। ब्रेसिज़ के बाहर, वे अब और मौजूद नहीं हैं। ब्रेसिज़ के भीतर सभी कोड एक सबहेल में चलाया गया है क्योंकि यह पाइपलाइन का एक घटक है ।
आप ब्रेसिज़ के बीच कोड की मनमानी मात्रा डाल सकते हैं, ताकि आप इस पाइपिंग-इन-ए-ब्लॉक निर्माण का उपयोग कर सकें जब भी आपको शेल स्क्रिप्ट का एक ब्लॉक चलाने की आवश्यकता होती है जो किसी और चीज के आउटपुट को पार करती है।