2009-02-04 15 views
27

से मेल खाता है बैशबैश: चर की सूची जिसका नाम एक निश्चित पैटर्न

echo ${!X*} 

में चर जिसका नाम 'एक्स' के साथ शुरू होता की सभी के नाम प्रिंट होगा मिलता है।
क्या यह एक मनमाना पैटर्न के साथ मिलना संभव है, उदा। उन चर के सभी नाम प्राप्त करें जिनके नाम में किसी भी स्थिति में 'एक्स' है? भी मूल्य में एक्स के लिए लग रहा है कि माफ करना,:

उत्तर

41

builtin आदेश compgen का उपयोग करें:

compgen -A variable | grep X 
+3

(+1) यह स्थानीय चर के साथ भी काम करता है। यह कंपेन आज का प्रकाशन रहा है - मुझे लगता है कि मुझे * सभी बैश बिल्टिन का अध्ययन करना चाहिए ... –

6

यह करना चाहिए:

env | grep ".*X.*" 

संपादित करें।

set | awk -F "=" '{print $1}' | grep ".*X.*" 
+1

केवल स्थानीय चर नहीं बल्कि पर्यावरण चर होते हैं। हालांकि "env" के बजाय "सेट" का उपयोग करना काम कर सकता है। –

+0

धन्यवाद, मुझे सेट के बारे में पता नहीं था, मैं आमतौर पर रुचि रखने वाले किसी भी वर्जन को "निर्यात" करता हूं इसलिए मैं केवल env का उपयोग करता हूं। – diciu

+1

भी प्रिंट आउट फ़ंक्शन सेट करें, न केवल स्थानीय चर और पर्यावरण चर – zhaorufei

1
: यह संस्करण केवल वर नाम

env | awk -F "=" '{print $1}' | grep ".*X.*" 

पॉल टिप्पणी में बताते हैं के रूप में, तुम भी स्थानीय चर के लिए देख रहे हैं, env जरूरत सेट के साथ प्रतिस्थापित किया जा करने में एक्स के लिए लग रहा है

सबसे आसान एक

printenv |grep D.*= 

फर्क सिर्फ इतना है कि यह भी चर के मूल्यों बाहर प्रिंट है क्या करने के लिए हो सकता है।

1
env | awk -F= '{if($1 ~ /X/) print $1}' 
+0

मुझे मूल्य भी प्राप्त करने की आवश्यकता थी। अपने समाधान से '$ 1' को हटाकर, मेरी समस्या हल हो गई थी। धन्यवाद। – jpbochi

3

यह केवल चर नाम और आउटपुट केवल मिलान चर नाम में एक्स के लिए खोज करेंगे:

set | grep -oP '^\w*X\w*(?==)' 

या खोजा पैटर्न के आसान संपादन के लिए

set | grep -oP '^\w*(?==)' | grep X 

या बस (शायद याद अधिक आसान करने के लिए)

set | cut -d= -f1 | grep X 

आप मैच के लिए नाम = मूल्य के रूप में चर नाम के अंदर एक्स, लेकिन उत्पादन चाहते हैं, तो:

set | grep -P '^\w*X\w*(?==)' 

और आप मिलान करना चाहते हैं एक्स परिवर्तनीय नामों के अंदर, लेकिन आउटपुट केवल मूल्य, फिर:

set | grep -P '^\w*X\w*(?==)' | grep -oP '(?<==).*' 
+0

यह ध्यान देने योग्य है कि -पी को कुछ पुराने प्लेटफ़ॉर्म पर अतिरिक्त लाइब्रेरी स्थापित करने की आवश्यकता हो सकती है – noonex