2012-05-26 11 views
6

Ho un file con i contenuti:array associativi lettura da file

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

vorrei leggere ogni riga e spingere contesto alla variabile array associativo. Non ho alcun successo con seguente codice:

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

ho ottenuto un errore:

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

è possibile lettura array da file?

risposta

6

Effettuare le seguenti due modifiche: Rimuovere le parentesi nella dichiarazione declare, e utilizzare read con l'opzione -r (caratteri disabilitazione di fuga):

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

Rimuovi le parentesi dall'istruzione declare poiché sono già nei tuoi dati.

declare -A row="$r" 
+0

sì, funziona, vi ringrazio molto –