2012-05-26 21 views
6

से पढ़ने साहचर्य सरणियों मैं सामग्री के साथ एक फ़ाइल है:फ़ाइल

([datname]=template1 [datctype]=cs_CZ.utf-8) 
([datname]=template0 [datctype]=cs_CZ.utf-8) 
([datname]=postgres [datctype]=cs_CZ.utf-8) 
([datname]=some\ stupid\ name [datctype]=cs_CZ.utf-8) 
([datname]=jqerqwer,\ werwer [datctype]=cs_CZ.utf-8) 

मैं हर पंक्ति पढ़ सकते हैं और साहचर्य सरणी चर के संदर्भ पुश करने के लिए होगा। मैं निम्नलिखित कोड के साथ कोई सफलता:

test3.sh: line 8: row: ([datname]=template1 [datctype]=cs_CZ.utf-8): must use subscript when assigning associative array 

संभव फ़ाइल से पढ़ने सरणी है:

(cat <<EOF 
([datname]=template1 [datctype]=cs_CZ.utf-8) 
([datname]=template0 [datctype]=cs_CZ.utf-8) 
EOF      
) |      
while read r    
do      
    declare -A row=("$r") 
    echo ${row[datname]} 
done; 

मैं एक त्रुटि मिली?

उत्तर

6

निम्नलिखित दो परिवर्तन करें: घोषित बयान में कोष्ठक निकालें, और विकल्प के साथ read का उपयोग -r (अक्षम भागने वर्ण):

while read -r line; do 
    declare -A row="$line" 
    ... 
done 
2

अपने declare कथन से ब्रांड्स को हटाएं क्योंकि वे पहले से ही आपके डेटा में हैं।

declare -A row="$r" 
+0

हाँ, यह काम करता है, आपको बहुत बहुत धन्यवाद –