एक पॉइंटर ( मेमोरी के स्थान पर ) वास्तव में C से उच्चतर स्तर की किसी भी चीज़ में एक उपयोगी अवधारणा नहीं है, जैसा कि यह पायथन या शेल जैसा कुछ है। ऑब्जेक्ट्स के संदर्भ उच्च-स्तरीय भाषाओं में उपयोगी होते हैं, शायद जटिल डेटा संरचनाओं के निर्माण के लिए भी आवश्यक होते हैं। लेकिन ज्यादातर मामलों में स्मृति पतों के संदर्भ में सोचना बहुत उपयोगी होने के लिए निम्न स्तर है।
बैश (और अन्य गोले) में, आप ${array[index]}संकेतन के साथ सरणी तत्वों के मान प्राप्त कर सकते हैं , उन्हें असाइन कर सकते हैं और सरणी में तत्वों array[index]=...की संख्या प्राप्त कर सकते हैं ${#array[@]}। कोष्ठक के अंदर की अभिव्यक्ति एक अंकगणितीय अभिव्यक्ति है। एक बने हुए उदाहरण के रूप में, हम सभी सरणी सदस्यों के लिए एक निरंतर उपसर्ग जोड़ सकते हैं:
for ((i=0 ; i < ${#array[@]} ; i++ )) ; do
array[i]="foo-${array[i]}"
done
(यदि हम केवल मूल्यों की परवाह करते हैं, और अनुक्रमित नहीं, तो बस for x in "${array[@]}" ; do...ठीक होगा।)
साथ साहचर्य या विरल सरणियों , एक संख्यात्मक पाश ज्यादा मतलब नहीं है, लेकिन इसके बजाय हम साथ सरणी कुंजी / अनुक्रमित लाने के लिए आवश्यकता होगी ${!array[@]}। उदाहरण के लिए
declare -A assoc=([foo]="123" [bar]="456")
for i in "${!assoc[@]}" ; do
echo "${assoc[$i]}"
done
इसके अलावा, बैश के पास दूसरे चर के लिए अप्रत्यक्ष रूप से इंगित करने के दो तरीके हैं:
- सिंटैक्स का उपयोग करते
${!var} हुए अप्रत्यक्ष विस्तार , जो चर का नाम जिसका varऔर में है , का उपयोग करता है
- namerefs माध्यम से बनाया जा करने की जरूरत है जो
declarebuiltin (या kshसंगत पर्याय, typeset)। चर का संदर्भ declare -n ref=varबनाता refहै var।
नामेरेफ़्स भी अनुक्रमण का समर्थन करते हैं, इसमें यदि हमारे पास है arr=(a b c); declare -n ref=arr;तो ${ref[1]}विस्तार करेगा b। उपयोग ${!p[1]}करने के बजाय pएक सरणी के रूप में ले जाएगा , और इसके दूसरे तत्व द्वारा नामित चर को देखें।
बैश में, नामरेफ़्स का शाब्दिक अर्थ है कि, नाम से संदर्भ , और एक फ़ंक्शन के अंदर से नामांक का उपयोग करके नामित चर के स्थानीय मूल्य का उपयोग किया जाएगा। यह छपेगा local value of var।
#!/bin/bash
fun() {
local var="local value of var"
echo "$ref";
}
var="global var"
declare -n ref=var
fun
BashFAQ का अप्रत्यक्ष पर एक लंबा लेख है , भी।