이것이 Bash의 "else" 문 안에 배열을 만드는 올바른 방법입니까?

이것이 Bash의 "else" 문 안에 배열을 만드는 올바른 방법입니까?

이것이 맞는지 아는 사람 있나요? 이것이 Bash의 "else" 문 안에 배열을 만드는 올바른 방법입니까? else [[ $SELECTION != "a|b|c|x" ]]

답변1

나는 당신의 목적이 $SELECTION다음과 같은지 테스트하는 것이라고 가정합니다.아니요 a, b, c또는 x, 명령문의 "else-if" 분기에서 이 작업을 수행하려고 합니다 if.

테스트에서는 $SELECTION리터럴 문자열이 아닌지 테스트합니다 a|b|c|x. "else-if" 분기(다음과 같이 작성됨)에서 테스트를 사용하려는 경우 구문이 올바르지 않습니다 elif [[ ... ]].

, , 또는 이외의 다른 것이 $SELECTION있는지 테스트하려면 다음을 사용할 수 있습니다 .abcx

if ...; then
    ...
else
    case $SELECTION in
        a|b|c|x)
            # do nothing here
            ;;
        *)
            echo 'it is not a, b, c, or x'
    esac
fi

case이는 주어진 값이 |구분된 패턴과 일치 하면 아무 작업도 수행하지 echo않고 일치하지 않으면 호출하는 POSIX 표준 문을 사용합니다 .

또는,

if ...; then
    ...
elif [[ $SELECTION != @(a|b|c|x) ]]; then
    echo 'it is not a, b, c, or x'
fi

|이는 inside 로 구분된 모든 패턴과 일치하는 확장된 와일드카드 패턴을 사용합니다 @(...).

또는 어색한 테스트를 제거하세요 !=.

if ...; then
    ...
elif [[ $SELECTION == !(a|b|c|x) ]]; then
    echo 'it is not a, b, c, or x'
fi

패턴은 인용 해제되어야 합니다. 테스트가 elif브랜치에서 수행되는지 여부는 테스트 자체와 관련이 없습니다.

매뉴얼의 "패턴 일치" 섹션을 참조하십시오 bash.

관련 정보