連想配列を宣言します。
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