
#!/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