シェルスクリプトの辞書は、最後の関連項目のみを表示します。

シェルスクリプトの辞書は、最後の関連項目のみを表示します。

辞書を使用しようとしたときに奇妙な動作を見つけました。次の辞書を作成するとき:

declare -A servers
servers=( ["omega"]="dev" ["delta"]="test" ["beta"]="ppd" ["alpha"]="prd" )


echo "${servers["omega"]}"

最初の要素ではなく、最後の要素「prd」が画面に印刷されます。最初の項目を除くすべての項目を削除すると、正しい出力が得られます。私が見たすべてのコード例は上記のように辞書を使用しているので、私が間違っているかどうかはわかりません。誰でも私の間違いを知ることができますか?

挨拶

答え1

@Yurkoのコメントが正しいと思います。

バージョン4より前のbashの場合(例:/bin/bashMac):

  1. このdeclare -A行はエラー(declare: -A: invalid option)を生成し、配列は次のようになります。宣言されていない
  2. 2行目は索引配列:インデックスは算術式で評価されるためです。
  3. Bash算術式では、「基本」単語は変数名として扱われます。設定されていない変数にはゼロ値が割り当てられます。

したがって、各文字列にインデックスが割り当てられます0

この試み:

declare -p servers

出力を表示する必要があります。

declare -a servers='([0]="prd")'

関連情報