Linux의 "case" 문에 "or"라는 개념이 있을 수 있습니까?

Linux의 "case" 문에 "or"라는 개념이 있을 수 있습니까?

리눅스를 사용할 수 있다사례많은 언어와 마찬가지로 다음과 같습니다.

case ${x} in
    one)
        echo "1"
        ;;
    two)
        echo "2"
        ;;
esac

그들 중 하나로 같은 일을 할 수 있나요?$x또는$y하지만? 그럼, 이것을 상상해 보세요:

case ( ${x} or ${y} ) in
    one)
        echo "1"
        ;;
    two)
        echo "2"
        ;;
esac

이는 다음과 같은 경우를 의미합니다.$x또는$y포함하다하나또는그 다음에1또는2별도로 인쇄하십시오.

답변1

아니요, 하지만 값과 대소문자를 반복할 수 있습니다.

for v in "$x" "$y"; do 
    case "$v" in
    one) echo "1"; break ;;
    two) echo "2"; break ;;
    esac
done

1그러면 or 가 2첫 번째 $x일치 항목 으로 인쇄됩니다 $y. 물론 두 가지가 일치하는 경우 어떻게 할지 결정하는 것은 사용자의 몫입니다.

답변2

$x가능한 값 과 거기에 무엇이 있을 것인지 알고 있다면 $y문자열을 작성 "$x$y"하고 다음과 같은 전역 패턴을 찾을 수 있습니다.

case $x$y in
    *one*) echo "1" ;;
    *two*) echo "2" ;;
esac

답변3

변수 값에 문자를 사용할 수 없는 경우 해당 문자를 구분 기호로 사용할 수 있습니다. 예를 들어, x 값과 y 값 모두 콜론을 포함할 수 없다고 결정했다고 가정합니다.

case ":${x}:${y}:" in
    *:one:*)
        echo "1"
        ;;
    *:two:*)
        echo "2"
        ;;
esac

이는 다양한 수의 문자열로 쉽게 확장될 수 있습니다. 그러나 :테스트 중인 문자열에 나타날 가능성이 없는 문자(여기) 또는 일련의 문자를 찾아야 한다는 점을 기억하십시오 .

관련 정보