IFステートメントで複数の条件を確認する方法

IFステートメントで複数の条件を確認する方法

次の文で複数の条件をテストしようとしていますif

If [[[ "$var1" = "$var2" || "$var1" = "$var3" || "$var1" = "$var4" ]]];

ただし、上記の構文を実行するとエラーが発生します。 IF文で複数の条件を確認するのに役立つ人はいますか?

答え1

括弧が多すぎてif大文字で表記しないでください。この試み:

if [[ "$var1" == "$var2" || "$var1" == "$var3" || "$var1" == "$var4" ]]; then

答え2

sh(スペルエラー、[[置き換える必要があります[[[)構文を使用するよりも標準構文を使用する方がksh簡単です。

case $var1 in
  "$var2" | "$var3" | "$var4") echo match;;
  *) echo no match;;
esac

答え3

[[ "$var1" == "$var2" || "$var1" == "$var3" || "$var1" == "$var4" ]]

または可読性のために

[[ "$var1" == "$var2" ]] ||
[[ "$var1" == "$var3" ]] ||
[[ "$var1" == "$var4" ]]

またはcaseStefan Chazerasが提案したように、または変数名に対して複雑すぎるループを実行し、名前参照(bashまたはksh93)を使用します。

for var in var2 var3 var4; do
    typeset -n v="$var"
    if [[ "$var1" == "$v" ]]; then
        # printf '%s has same value as var1\n' "$var"
        found=1
        break
    fi
done

if [[ "$found" -eq 1 ]]; then ...

関連情報