2012-02-08 14 views
0

私はforループの中で配列を作成し、各繰り返しにカウンタ(配列要素)に含まれる文字列を使って各配列に名前を付ける必要があるbashスクリプトを書いています。Bash - ループカウンタを使って配列を作成する

myArray=(joe bob dave mark) 


for i in "${myArray[@]}" 
do 
    "$k_array"=(`cat fileUsedToPopulate.txt`) 
done 

# echo to test if one of the arrays has been created and populated 

for j in "${joe_array[@]}" 
do 
    echo $j 
done 

所望の結果が4列、joe_array bob_arrayなど、ファイルが移入各ある:ここ

コードです。

しかし、$ kをエスケープして、それを宣言/配置するときに配列名に追加することはできませんでした。ここで

は、私が取得していますエラーです:

行30:予期しないトークン`cat fileUsedToPopulate.txt ' 行30:"$k_array"=(猫$ DIR/$ braDir/oem.txt`)' 付近に構文エラーのため

感謝任意のヘルプが提供されます。ファイルの内容は、スペースまたはその他のセパレータが含まれている場合は、(適切なエスケープ付き)ネストされた二重引用符が必要

val=$(cat fileUsedToPopulate.txt) 
for k in "${myArray[@]}" 
do 
    eval "${k}_array"="\"${val}\"" 
done 

注:名前が別の変数に依存して、変数に割り当てる

答えて

2

使用はeval。さもなければ、シェルはそのコマンドの一部を実行するコマンドとして解釈します。また、$kに変数名の前後の中括弧が必要な場合、またはシェルが変数名k_arrayを探します。

+0

うん、私はそれを得る;-)。良い一日を過ごしてください。 – shellter

+0

ありがとう、あなたも! –

+0

お返事ありがとうございます。実際のスクリプトでは、使用されたファイルのメモ、これはサンプルコードです。配列を生成するために使用されるファイルは、繰り返しごとに異なります。 $ kに依存するテキストファイルを指すために使用されるパスがあります。私は評価コードを使用しようとしましたが、最初の\をエスケープしませんし、ループが正しく終了しません。 –

関連する問題