यहां @GinkgoFr उत्तर के समान कुछ है, लेकिन @Tino या @DejayClayton द्वारा पहचानी गई समस्याओं के बिना, और @ डगलस लीडर के चतुर set -o posix
बिट की तुलना में अधिक मजबूत है :
+ function SOLUTION() { (set +o posix; set) | sed -ne '/^\w\+=/!q; p;'; }
अंतर यह है कि यह समाधान पहली गैर-चर रिपोर्ट के बाद STOPS है, उदाहरण के लिए पहले फ़ंक्शन द्वारा रिपोर्ट किया गया set
BTW: "टिनो" समस्या हल हो गई है। भले ही POSIX को बंद कर दिया गया हो और फ़ंक्शन द्वारा रिपोर्ट किया गया हो set
, sed ...
समाधान का भाग केवल चर रिपोर्ट (जैसे VAR=VALUE
लाइनों) के माध्यम से अनुमति देता है । विशेष रूप से, A2
है नहीं नकली तौर पर यह उत्पादन में किया जाता है।
+ function a() { echo $'\nA2=B'; }; A0=000; A9=999;
+ SOLUTION | grep '^A[0-9]='
A0=000
A9=999
और: "DejayClayton" समस्या हल हो गई है (परिवर्तनशील मूल्यों में एम्बेडेड newlines आउटपुट को बाधित नहीं करता है - प्रत्येक VAR=VALUE
को एक एकल आउटपुट लाइन मिलती है):
+ A1=$'111\nA2=222'; A0=000; A9=999;
+ SOLUTION | grep '^A[0-9]='
A0=000
A1=$'111\nA2=222'
A9=999
नोट: @DouglasLeeder द्वारा प्रदान किया गया समाधान "DejayClayton" समस्या (एम्बेडेड सुर्खियों के साथ मूल्यों) से ग्रस्त है। नीचे, A1
गलत है और A2
बिल्कुल नहीं दिखाना चाहिए।
$ A1=$'111\nA2=222'; A0=000; A9=999; (set -o posix; set) | grep '^A[0-9]='
A0=000
A1='111
A2=222'
A9=999
अंतिम रूप से: मुझे नहीं लगता कि bash
मामलों का संस्करण है, लेकिन यह हो सकता है। मैंने इस पर अपना परीक्षण / विकास किया:
$ bash --version
GNU bash, version 4.4.12(1)-release (x86_64-pc-msys)
पोस्ट-एससीआरआईपीटी: ओपी के कुछ अन्य जवाबों को देखते हुए, मुझे <100% यकीन है कि set
हमेशा मूल्य के भीतर नई \n
सूचियों को परिवर्तित करता है , जो कि यह समाधान "डेजेकेल्टन" समस्या से बचने पर निर्भर करता है। शायद यह एक आधुनिक व्यवहार है? या एक संकलन-समय भिन्नता? या एक set -o
या shopt
विकल्प की स्थापना? यदि आप इस तरह के बदलाव जानते हैं, तो कृपया एक टिप्पणी जोड़ें ...
-o posix
अब एक अंतर के साथ अच्छा कॉल केवल चर शामिल होंगे।