내 정규 표현식에 어떤 문제가 있나요?

내 정규 표현식에 어떤 문제가 있나요?
#!/bin/sh

REGEX="^[2][0-2]:[0-5][0-9]$"
TIME="21:30"

if [ $TIME = $REGEX ]; then
    echo "Worked"
else
    echo "Did not work"
fi

: 와 관련이 있는 것 같지만 제 경우에는 이스케이프 시퀀스가 ​​필요하지 않은 일반 플래그일 뿐입니다.

답변1

간단한 =정규식 비교가 잘못되었습니다. 을 사용해야 =~하며 이중 괄호도 사용해야 합니다.

if [[ $TIME =~ $REGEX ]]; then
  ...

또한보십시오:https://stackoverflow.com/questions/17420994/bash-regex-match-string

답변2

다음 case설명도 볼 수 있습니다.

REGEX="[2][0-2]:[0-5][0-9]"; # Note no placeholders like ^ and $ here
TIME="21:30"
case $TIME in
   $REGEX ) echo "Worked" ;; # Note no double quotes around $REGEX for allowing the wildcard matching to happen
        * ) echo "Did not work" ;;
esac

관련 정보