辞書を使用しようとしたときに奇妙な動作を見つけました。次の辞書を作成するとき:
declare -A servers
servers=( ["omega"]="dev" ["delta"]="test" ["beta"]="ppd" ["alpha"]="prd" )
echo "${servers["omega"]}"
最初の要素ではなく、最後の要素「prd」が画面に印刷されます。最初の項目を除くすべての項目を削除すると、正しい出力が得られます。私が見たすべてのコード例は上記のように辞書を使用しているので、私が間違っているかどうかはわかりません。誰でも私の間違いを知ることができますか?
挨拶
答え1
@Yurkoのコメントが正しいと思います。
バージョン4より前のbashの場合(例:/bin/bash
Mac):
- この
declare -A
行はエラー(declare: -A: invalid option
)を生成し、配列は次のようになります。宣言されていない。 - 2行目は索引配列:インデックスは算術式で評価されるためです。
- Bash算術式では、「基本」単語は変数名として扱われます。設定されていない変数にはゼロ値が割り当てられます。
したがって、各文字列にインデックスが割り当てられます0
。
この試み:
declare -p servers
出力を表示する必要があります。
declare -a servers='([0]="prd")'