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