${!FOO}
में एक डबल प्रतिस्थापन करता है bash
, जिसका अर्थ है कि यह FOO का (स्ट्रिंग) मान लेता है और इसे एक चर नाम के रूप में उपयोग करता है।
zsh
इस सुविधा का समर्थन नहीं करता है।
वहाँ इस काम ही में बनाने के लिए एक रास्ता है bash
और zsh
?
पृष्ठभूमि:
मुझे पर्यावरण चर की एक सूची मिली है, जैसे
PATH MAIL EDITOR
और पहले चर नाम और बाद में उनके मान मुद्रित करना चाहते हैं।
यह काम करता है bash
लेकिन इसमें नहीं zsh
:
for VAR in LIST
do
echo $VAR
echo ${!VAR}
done
यह किसी भी तरह से "पुराना तरीका" संभव होना चाहिए eval
, लेकिन मैं इसे काम करने के लिए नहीं कर सकता:
for VAR in LIST
do
echo $VAR
echo `eval \$$VAR`
done
मैं कभी नहीं समझ पा रहा हूं कि मैं जरूरत पड़ने पर ${${VAR}}
भी मनमाने ढंग से गहरे सब्जेक्टिटेशन जैसे कि या नहीं कर सकता हूं ${${${VAR}}}
, इसलिए उसके लिए स्पष्टीकरण भी अच्छा होगा।
bash
इसके साथ डींग मारने की आवश्यकता नहीं है , इसका वास्तव में एक ही कार्य है (और बहुत कुछ), केवल एक अलग पैटर्न का उपयोग करता है, अर्थात् ${(p)FOO}
।
(e)
-2.6-Beta17 (मई 1996) में zsh का पैरामीटर विस्तार ध्वज, (P)
ध्वज को 3.1.5-pws-7 (1999) में जोड़ा गया । ${!var}
2.0 में बैश है (दिसंबर 1996)।