私の正規表現の何が問題なのでしょうか?

私の正規表現の何が問題なのでしょうか?
#!/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

関連情報