連想配列の特定の値に対応するキーを取得します。

連想配列の特定の値に対応するキーを取得します。

連想配列を宣言します。

declare -A array=([a]=blue [b]=red [c]=yellow)

今できます:

echo ${array[@]}  --> blue red yellow

または

echo ${array[b]}  --> red

または

echo ${!array[@]} --> a b c

red今値に関連するキーを知りたいです。単一のキーだけを検出する方法はありますか?

ベストアンサー1

特定の値に対応するキーのリストを取得し、このリストを配列に保存するとします。

#!/bin/bash

declare -A hash
hash=(
    [k1]="hello world"
    [k2]="hello there"
    [k3]="hello world"
    [k4]=bumblebees
)

string="hello world"

keys=()
for key in "${!hash[@]}"; do
    if [[ ${hash[$key]} == "$string" ]]; then
        keys+=( "$key" )
    fi
done

printf 'Keys with value "%s":\n' "$string"
printf '\t%s\n' "${keys[@]}"

次に、キーリストを繰り返して、探している文字列に対して各キーの値をテストします。一致するものがあれば、キーをkeys配列に保存します。

最後に検索されたキーが出力されます。

このスクリプトの出力は次のとおりです。

Keys with value "hello world":
        k1
        k3

おすすめ記事