web-dev-qa-db-ja.com

連想配列の作成時にエラーが発生しました

Bashで連想配列を構築しようとしています

#!/bin/bash
declare -A hero_escore

    hero_escore=( "Invoker_Anti-Mage : -44"
    "Tinker_Nyx Assassin : 32"
    "Troll Warlord_Drow Ranger : 3" )

これらは3つの異なる行です。それだけを意図しています。しかし、上記のコードは各行にエラーを与えます-Troll Warlord_Drow Ranger : 3: must use subscript when assigning associative array。私がこのようなものを使うことを期待しているからですか-[Invoker_Anti-Mage]="-44"?もしそうなら、とにかく、bash 3などを使用してプログラムで使用した方法で動作させることができますか?私が与えたフォーマットで連想配列を構築したいと思います。出来ますか?

1
Ashwin

連想配列が必要な場合は、bash 4を使用し、必要な構文を使用する必要があります。表示するコードは、インデックス付き配列に3つの文字列を割り当てるだけです(here_escoreは連想配列として宣言されていませんでした)。

3
chepner

このソリューションはBash4で機能するはずです。

declare -A hero_escore=( ["Invoker_Anti-Mage"]="-44"
    ["Tinker_Nyx-Assassin"]="32"
    ["Troll-Warlord_Drow-Ranger"]="3" )

for hero in ${!hero_escore[@]}; do
    echo "$hero : ${hero_escore[$hero]}";
done

また、この投稿は本当に役に立ちました: https://stackoverflow.com/questions/1494178/how-to-define-hash-tables-in-bash

幸運を!

0