2012-05-26 16 views
6

Ich habe eine Datei mit Inhalt:Lese Assoziativ Arrays aus Datei

([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) 

I würde jede Zeile und schiebt Kontext assoziative Array-Variablen zu lesen. Ich habe keinen Erfolg mit folgendem Code:

(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; 

Ich habe einen Fehler:

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

Sind möglich Lese Array aus der Datei?

Antwort

6

Nehmen Sie die folgenden zwei Änderungen vor: Entfernen Sie die Klammern in der declare-Anweisung, und verwenden Sie read mit der Option -r (disable Escape Zeichen):

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

Entfernen Sie die Klammern aus Ihrer declare-Anweisung, da sie bereits in Ihren Daten enthalten sind.

declare -A row="$r" 
+0

ja, es funktioniert, ich danke Ihnen sehr viel –