多次元連想配列を作成しようとしていますが、何か助けが必要です。私はthe page suggested in this SO answerを見直しましたが、それは私をさらに混乱させました。これまでのところ、ここで私が持っているものです。BASH:多次元連想配列の助けが必要
スクリプト:
#!/bin/bash
declare -A PERSONS
declare -A PERSON
PERSON["FNAME"]='John'
PERSON["LNAME"]='Andrew'
PERSONS["1"]=${PERSON[@]}
PERSON["FNAME"]='Elen'
PERSON["LNAME"]='Murray'
PERSONS["2"]=${PERSON[@]}
for KEY in "${!PERSONS[@]}"; do
TMP="${PERSONS["$KEY"]}"
echo "$KEY - $TMP"
echo "${TMP["FNAME"]}"
echo "${TMP["LNAME"]}"
done
出力:あなたのために$ TMP配列の特定のインデックスにアクセスしようとして見ることができるように
1 - John Andrew
John Andrew
John Andrew
2 - Elen Murray
Elen Murray
Elen Murray
ループは配列全体を返します。
[Q] for
ループ内の$ TMP配列の "FNAME"インデックスと "LNAME"インデックスに別々にアクセスするにはどうすればよいですか?
ありがとうございました。
私はあなたのソリューションを試しましたが、それは私が$人をループするときに探していたものではありません。 「1、LNAME = Andrew」、「2、FNAME = Elen」、「1、FNAME = John」、および「2、LNAME-Murray」の順番で実行されます。なぜbashが多次元配列をサポートできないのか、私はまだ困惑しています。私がやっていることは、変数($ PERSON配列)を配列要素($ PERSONS ["X"])に割り当てることです。なぜこの変数iのタイプが重要なのでしょうか? bashチェックをして配列を配列要素に割り当てるのを防ぎますか? – Max
@ user359650、これはbash開発者の設計上の決定です。 bashのマニュアルから引用すると、「Bashは一次元の索引付きおよび連想配列変数を提供しています。」あなたがしているのは、配列インデックスに文字列( "John Andrew")を割り当てることです。私はあなたが何をやっているのかをもう一度見直す必要があると思います。多次元配列を絶対に必要とするならば、間違ったツールを使って作業しています。 –
また、連想配列には特別な順序はありません。 –