English 中文(简体)
从文件读取连结阵列
原标题:reading associative arrays from file
  • 时间:2012-05-26 13:39:03
  •  标签:
  • bash

我有一份包含内容的文件:

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

可能从文件读取数组吗?

最佳回答

作出以下两个修改:删除声明语句中的括号,使用 read ,并使用 -r 选项(禁用解脱字符):

while read -r line; do
   declare -A row="$line" 
    ...  
done
问题回答

删除您 declare 语句中的括号,因为它们已经重新出现在您的数据中。

declare -A row="$r"




相关问题
Parse players currently in lobby

I m attempting to write a bash script to parse out the following log file and give me a list of CURRENT players in the room (so ignoring players that left, but including players that may have rejoined)...

encoding of file shell script

How can I check the file encoding in a shell script? I need to know if a file is encoded in utf-8 or iso-8859-1. Thanks

Bash usage of vi or emacs

From a programming standpoint, when you set the bash shell to use vi or emacs via set -o vi or set -o emacs What is actually going on here? I ve been reading a book where it claims the bash shell ...

Dynamically building a command in bash

I am construcing a command in bash dynamically. This works fine: COMMAND="java myclass" ${COMMAND} Now I want to dynamically construct a command that redirectes the output: LOG=">> myfile.log ...

Perform OR on two hash outputs of sha1sum

I want perform sha1sum file1 and sha1sum file2 and perform bitwise OR operation with them using bash. Output should be printable i.e 53a23bc2e24d039 ... (160 bit) How can I do this? I know echo $(( ...

Set screen-title from shellscript

Is it possible to set the Screen Title using a shell script? I thought about something like sending the key commands ctrl+A shift-A Name enter I searched for about an hour on how to emulate ...

热门标签