यहां ऐसा है @GinkgoFr जवाब देने के लिए इसी तरह की mething है, लेकिन समस्याओं @Tino या @DejayClayton, से पहचान और बिना @ DouglasLeeder के चतुर set -o posix
बिट से अधिक मजबूत है:
+ function SOLUTION() { (set +o posix; set) | sed -ne '/^\w\+=/!q; p;'; }
अंतर यह है कि इस समाधान पहली गैर के बाद बंद हो जाता है - उपलब्ध रिपोर्ट, उदाहरण के लिए set
बीटीडब्ल्यू द्वारा रिपोर्ट किया गया पहला फ़ंक्शन: "टिनो" समस्या हल हो गई है। हालांकि 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" समस्या हल हो जाता है (चर मान में एम्बेडेड नई-पंक्तियों नहीं उत्पादन को बाधित करते हैं - प्रत्येक 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
, जो यह समाधान "DejayClayton" समस्या से बचने के लिए निर्भर करता है। शायद यह एक आधुनिक व्यवहार है? या एक संकलन समय भिन्नता? या set -o
या shopt
विकल्प सेटिंग? यदि आप इस तरह के बदलावों के बारे में जानते हैं, तो कृपया एक टिप्पणी जोड़ें ...
जब आप पोस्ट कर रहे थे तो आपने संपादित किया था। '-o posix' के साथ अच्छी कॉल अब एक diff में केवल चर शामिल होंगे। – ezpz
अस्थायी फ़ाइलों का उपयोग किए बिना: 'VARS = "\' set -o posix; सेट \ '"; स्रोत स्क्रिप्ट; SCRIPT_VARS = "\' grep -vFe "$ VARS" <<< "$ (सेट-पॉज़िक्स; सेट)" | grep -v^VARS = \ '"; VARS अनसेट; '। यह एक तैयार-से-सहेजने वाले प्रारूप में वर्रों को भी आउटपुट करेगा। सूची में स्क्रिप्ट बदलने वाले वेरिएबल्स शामिल होंगे (यह निर्भर करता है कि यह वांछनीय है) –
दुर्भाग्यवश पॉज़िक्स मोड भी ऐसे वर्ट्स को आउटपुट करता है जो अनसेटटेबल हैं, इसलिए आप इसके आउटपुट को "स्रोत" नहीं कर सकते हैं और उन्हें वापस पढ़ सकते हैं। –