2012-08-08 16 views
11
#!/bin/bash 

set -x 

array_counter=0 
array_value=1 

array=(0 0 0) 

for number in ${array[@]} 
do 
    array[$array_counter]="$array_value" 
    array_counter=$(($array_counter + 1)) 
done 

जब स्क्रिप्ट ऊपर चल रहा है मैं निम्नलिखित डिबग आउटपुट मिलता है:बाश सरणी अनुक्रमणिका के रूप में परिवर्तनीय?

+ array_counter=0 
+ array_value=1 
+ array=(0 0 0) 
+ for number in '${array[@]}' 
+ array[$array_counter]=1 
+ array_counter=1 
+ for number in '${array[@]}' 
+ array[$array_counter]=1 
+ array_counter=2 
+ for number in '${array[@]}' 
+ array[$array_counter]=1 
+ array_counter=3 

क्यों चर $ array_counter नहीं का विस्तार जब सरणी में [] सूचकांक के रूप में इस्तेमाल किया?

+0

यह नहीं क्या कर रहा है कि आप उम्मीद:

आप अपने सूचकांक बढ़ाने के और अधिक कारगर तरीका कोशिश कर सकते हैं? आपके लूप के बाद, सरणी "1 1 1" –

+0

है, मैं डीबग आउटपुट सरणी [0] = 1, सरणी [1] = 1 और इतने पर दिखाने की अपेक्षा करता हूं। –

+0

आह, आप डीबग आउटपुट के बारे में चिंतित हैं। मैं वास्तव में आश्चर्यचकित हूं कि यह बिना किसी 'eval' के काम करता है, लेकिन यह हो सकता है कि lhs arrays अलग-अलग विस्तारित हो जाएं। –

उत्तर

19

बैश सरणी अनुक्रमित के रूप में चर के साथ पूरी तरह से खुश लगता है:

$ array=(a b c) 
$ arrayindex=2 
$ echo ${array[$arrayindex]} 
c 
$ array[$arrayindex]=MONKEY 
$ echo ${array[$arrayindex]} 
MONKEY 
+5

... और चूंकि सरणी सूचकांक को अंकगणितीय संदर्भ में मूल्यांकन किया जाता है, इसलिए आपको '$ 'की भी आवश्यकता नहीं होती है, आप' $ {array [arrayindex-1]} जैसी चीजें भी कर सकते हैं, जो वैध रूप से 'b' को संदर्भित करता है। –

-1

आपका उदाहरण वास्तव में काम करता है।

echo ${array[@]} 

इसकी पुष्टि करता है।

((array_counter++)) 
संबंधित मुद्दे