이런 경우 Case나 if를 사용할 때 가장 큰 차이점은 무엇인가요?

이런 경우 Case나 if를 사용할 때 가장 큰 차이점은 무엇인가요?

나는 if이런 유형의 것들을 항상 사용하는데, 아직 그것에 대해 생각해 본 적은 없지만, 다음과 같은 간단한 것을 말해 봅시다:

case $1 in
test)
echo "test"
;;
test2)
echo "test"
;;
test3
echo "test3"
esac

그리고

if [[ "$1" == "test" ]]
then
echo "test"
elif [[ "$1" == "test2" ]]
then
echo "test2"
elif [[ "$1" == "test3" ]]
then
echo "test3"
fi

이 경우 가장 큰 차이점은 무엇입니까? 둘 중 하나가 객관적으로 다른 작업에 더 적합합니까?

답변1

case단일 쉘의 값을 비교하십시오단어지정된 수의 쉘에모델 (만약에 어떠한)관련 쉘을 실행하십시오.목록 (만약에 어떠한)첫 번째 항목에서는 일치 항목을 찾았거나 전혀 일치하지 않습니다. case평가하다단어그리고 첫 번째 일치가 발생할 때까지 각 관련 패턴은 정확히 한 번 발생합니다. case실행된 쉘을 반환합니다.목록그렇지 않으면 0입니다.

if가치 비교반품 상태필요한 껍질목록0으로 설정한 후 원하는 then쉘을 실행합니다.목록일치하면 그렇지 않으면 선택사항 elif또는 else쉘을 실행하십시오.목록 (만약에 어떠한). if하나 이상의 셸 반환을 실행하고 평가합니다.목록연관이 있는 s 체인의 if모든 명령문 에 대해if목록0을 반환합니다.

ifthen실행된 모든 또는 목록에 대해 반환하고 else, 그렇지 않으면 원하는 if쉘 에 관계없이 0을 반환합니다.목록반품.

답변2

귀하의 예에서는 case하나의 변수에 대해 여러 패턴이 테스트됩니다. 변수에 대한 여러 모드를 포함하여 모든 테스트에 사용할 수 있는 여러 가지가 있지만 이는 일반적인 것입니다. $1
if ... elifif ... elif

관련 정보