O que há de errado com o meu regex?

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

Eu acho que tem algo a ver com o: mas, no que me diz respeito, este é apenas um sinal regular que não precisa de uma sequência de escape.

    
por Strict 31.05.2017 / 21:21

2 respostas

1

Você também pode usar a instrução 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
    
por 31.05.2017 / 21:47
3

O = simples está errado para a comparação de expressões regulares. Você tem que usar =~ , e você também terá que usar um suporte duplo:

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

Veja também: link

    
por 31.05.2017 / 21:25