${!ARRAYNAME[@]}
का अर्थ है "ARRAYNAME
के सूचकांकों"। जैसा कि में बताया गया है ARRAYNAME
सेट है, लेकिन एक स्ट्रिंग के रूप में, कोई सरणी नहीं है, यह 0
देता है।
यहां eval
का उपयोग कर एक समाधान है।
#!/usr/bin/env bash
ARRAYNAME='FRUITS'
FRUITS=(APPLE BANANA ORANGE)
eval array=\(\${${ARRAYNAME}[@]} \)
for fruit in "${array[@]}"; do
echo ${fruit}
done
क्या आप मूल रूप से करने के लिए कोशिश कर रहे थे एक Indirect Reference बनाने था। इन्हें बैश संस्करण 2 में पेश किया गया था और शैल में प्रतिबिंब-जैसे व्यवहार को प्राप्त करने का प्रयास करते समय eval
की आवश्यकता को बड़े पैमाने पर बदलने के लिए किया गया था।
आप जब सरणियों के साथ अप्रत्यक्ष संदर्भ का उपयोग कर चर नाम पर अपने अनुमान में [@]
शामिल है क्या करना है:
#!/usr/bin/env bash
ARRAYNAME='FRUITS'
FRUITS=(APPLE BANANA ORANGE)
array="${ARRAYNAME}[@]"
for fruit in "${!array}"; do
echo $fruit
done
सब ने कहा, यह इस में अप्रत्यक्ष संदर्भ का उपयोग करने के एक बात है मामूली उदाहरण, लेकिन, जैसा कि डेनिस विलियमसन द्वारा प्रदान किए गए लिंक में दर्शाया गया है, आपको असली दुनिया की स्क्रिप्ट में उनका उपयोग करने में संकोच करना चाहिए। वे सभी आपके कोड को आवश्यक से अधिक भ्रमित करने की गारंटी देते हैं। आम तौर पर आप एक एसोसिएटिव ऐरे के साथ आवश्यक कार्यक्षमता प्राप्त कर सकते हैं।
स्रोत
2012-06-24 20:07:16
कृपया देखें [BashFAQ/006] (http://mywiki.wooledge.org/BashFAQ/006)। –