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" ]]

또는 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 ...

관련 정보