대시의 변수 정규식 테스트?

대시의 변수 정규식 테스트?

[a-z][0-9]예를 들어 문자 1개와 숫자 1개의 형태로 가능한 많은 변수를 얻습니다 . 대시에서 테스트할 수 있는 방법이 있나요? 그것은 다음과 같습니다:

myvar=o7
if [ $myvar=o[0-4] ]; then 
"do this"
elif [ $myvar=o[5-7] ]; then
"do that"
fi

미리 감사드립니다 :)

답변1

원하는 것을 달성하기 위해 정규식이 필요하지 않습니다.

case $myvar in
    o[0-4])
        echo 'do this'
        ;;
    o[5-7])
        echo 'do that'
        ;;
    *)
        echo 'unsupported case'
esac

혹은 좀 더 간략하게 말하면,

case $myvar in
    o[0-4]) echo 'do this' ;;
    o[5-7]) echo 'do that' ;;
    *)      echo 'unsupported case'
esac

여기서는 $myvar주어진 각 케이스 라벨에 대해 값을 차례로 매칭하고, 첫 번째로 일치하는 라벨에 해당하는 코드가 실행됩니다. ;;태그의 코드를 다음 태그와 분리합니다 . 즉, 마지막 태그는필요 ;;)이 끝나기 전에 esac.

각 태그는 정규 표현식이 아닌 와일드카드 패턴 pattern)또는 형식으로 되어 있습니다 .(pattern)

case...esac구조는 특정 작업을 수행하는 표준적이고 간단한 방법을 제공하며 다음과 같이 작성할 수도 있습니다.

if [[ $myvar == o[0-4] ]]; then
    echo 'do this'
elif [[ $myvar == o[5-7] ]]; then
    echo 'do that'
else
    echo 'unsupported case'
fi

그리고 유사한 껍질 bash.

관련 정보