web-dev-qa-db-ja.com

ケースと配列を一緒にbashで使用する

caseを使用して、変数が配列内に含まれているかどうかを確認することはできますか?私は何かしたいです

ARR=( opt1 opt2 opt3 );

case $1 in
    $ARR)
        echo "Option is contained in the array";
    *)
        echo "Option is not contained in the array";
esac
2
red_trumpet

実際にはコンパクトで使いやすい方法ではありません。 $ARRは、配列の最初の要素、例ではopt1のみに展開されることに注意してください。

"${ARR[@]}"を使用することもできますが、データを使用すると、文字列1 optが誤検知されます。

bashの最新バージョンでは、連想配列の使用を検討できます。

declare -A arr
arr=( [opt1]=1 [opt2]=1 [opt3]=1 )

if [[ "${arr[$1]}" -eq 1 ]]; then
   # $1 is a key in arr
else
   # is not
fi
3
Kusalananda