次の文で複数の条件をテストしようとしています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" ]]
またはcase
、Stefan 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 ...