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

ファイルから配列を読み取ることは可能ですか?

4

2 に答える 2

6

次の2つの変更を行います。declareステートメントの括弧を削除readし、オプション-r(エスケープ文字を無効にする)とともに使用します。

while read -r line; do
   declare -A row="$line" 
    ...  
done
于 2012-05-26T14:32:22.913 に答える
2

かっこdeclareは既にデータに含まれているため、ステートメントから削除します。

declare -A row="$r"
于 2012-05-26T14:04:41.853 に答える