2012-05-26 28 views
6

que tienen un archivo con contenido:matrices asociativas al leer el archivo

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

lo haría para leer cada línea y empujar contexto variable de matriz asociativa. No tengo ningún éxito con el código siguiente:

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

me ha dado un error:

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

es posible gama de lectura de un archivo?

Respuesta

6

Realiza las siguientes dos cambios: Quitar los paréntesis en la instrucción declare, y utilizar read con la opción de desactivar -r (caracteres de escape):

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

Quite los paréntesis de su declaración declare ya que ya están en sus datos.

declare -A row="$r" 
+0

sí, funciona, muchas gracias –

Cuestiones relacionadas