यहां @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अब एक अंतर के साथ अच्छा कॉल केवल चर शामिल होंगे।