POSIX में अप्रत्यक्ष चर विस्तार जैसा कि बैश में किया जाता है?


11

क्या यह संभव है, या POSIX में अप्रत्यक्ष चर विस्तार करने के लिए कुछ सुरुचिपूर्ण हैक है जैसा कि बैश में किया जा सकता है?

संदर्भ के लिए, मैं निम्नलिखित करने की कोशिश कर रहा हूं:

for key in ${!map_*}
do
    # do something
done

संपादित करें: स्पष्ट करने के लिए, मैं खोल चर का उपयोग करना चाहूंगा जो इसके साथ शुरू होता है map_


5
फिर से खोलने के लिए वोट दिया। क्यू जानना चाहता है कि कैसे अप्रत्यक्ष रूप से, सभी चर जो वाइल्डकार्ड ( map_*) से मेल खाते हैं ।
SLM

मुझे आश्चर्य हुआ कि मैं अपने प्रश्न के संबंध में अस्पष्ट था: पी
डैश

4
कृपया पुनः खोलें। यह shवीएस का मामला है bash- देखें stackoverflow.com/a/5725402/1172302
निकोस एलेक्जेंड्रिस

तो यही कारण है कि कुछ लोगों को स्टैकओवरफ्लो पसंद नहीं है और कुछ स्टैकएक्सचेंज साइट्स।
धराशायी

जवाबों:


6

हैक का उपयोग करना है eval:

aaa=1
aab=2
aac=3

eval_like() {
    pattern=$1
    vars=`set |grep "^$pattern.*=" | cut -f 1 -d '='`
    for v in $vars; do
        eval vval="\$$v"
        echo $vval
    done
}   

for i in `eval_like aa`; do
    echo $i
done

धन्यवाद! setवही था जिसकी मुझे तलाश थी।
धराशायी

हालांकि यह मूर्खतापूर्ण नहीं है और यह एक मनमाना कमांड इंजेक्शन भेद्यता है (जैसे कि जब यह पर्यावरण में चलाया जाता है QUERYSTRING=$'\nmap_$(reboot)=x')। यह भी सावधान रहें कि bashशेल में set(जब नहीं चल रहा है sh) के आउटपुट में फ़ंक्शन की सूची शामिल है ।
स्टीफन चेज़लस
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.