bash एक उप-प्रसंग में एक पाइप लाइन के दाहिने हाथ को चलाता है , इसलिए चर (जो ऐसा readकरता है) में परिवर्तन संरक्षित नहीं है - वे तब मरते हैं जब कमांड के अंत में, उप-भाग करता है।
इसके बजाय, आप प्रक्रिया प्रतिस्थापन का उपयोग कर सकते हैं :
$ read a b dump < <(echo 1 2 3 4 5)
$ echo $b $a
2 1
इस मामले में, readहमारे प्राथमिक शेल के भीतर चल रहा है, और हमारी आउटपुट-प्रोडक्शन कमांड सबस्क्रिप्शन में चलती है। <(...)वाक्य रचना बनाता है एक subshell और एक पाइप, जो हम के इनपुट में पुनर्निर्देशित करने के लिए इसके उत्पादन से जोड़ता readसाधारण के साथ <आपरेशन । क्योंकि readहमारे मुख्य शेल में भाग लेने से चर सही तरीके से सेट हो जाते हैं।
जैसा कि एक टिप्पणी में कहा गया है, यदि आपका लक्ष्य शाब्दिक रूप से किसी स्ट्रिंग को चर में विभाजित करना है, तो आप यहां स्ट्रिंग का उपयोग कर सकते हैं :
read a b dump <<<"1 2 3 4 5"
मुझे लगता है कि वहाँ से यह अधिक है, लेकिन यह एक बेहतर विकल्प है अगर वहाँ नहीं है।