2012-05-26 4 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) 

Я хотел бы, чтобы прочитать каждую строку и нажмите контекст для ассоциативного массива переменного. Я не имею никакого успеха с помощью следующего кода:

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

я получил ошибку:

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

возможно чтение массива из файла?

ответ

6

сделать следующие два изменения: Удалите скобки в заявлении объявляют, и использовать read с опцией -r (отключить управляющие символы):

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

Удалите круглые скобки из вашего заявления declare, так как они уже находятся в ваших данных.

declare -A row="$r" 
+0

да, это работает, спасибо большое –

Смежные вопросы