error al validar la URL de youtube en bash

error al validar la URL de youtube en bash

Tengo el siguiente código:

read -p ":" URL
regex='^(https?\:\/\/)?(www\.youtube\.com)\/.+$'

    if [[ "$URL" =~ $regex ]]; then
        echo "not valid url "
        exit
    fi
echo 'Init fnction'
Init FUnction

Ingreso la URL:https://www.asdasd.com/watch?v=nD8WpYD_P94

pero el script no resulta tan válido: salida:

+ regex='^(https?\:\/\/)?(www\.youtube\.com)\/.+$'
+ [[ https://www.asdasd.com/watch?v=nD8WpYD_P94 =~ ^(https?\:\/\/)?(www\.youtube\.com)\/.+$ ]]
+ sleep 0.5
+ echo 'Init function...'
Init function...

No entiendo, ¿cuál es la forma correcta de validar una URL en youtube?

Respuesta1

El interior [[ ]] =~no es algo negado =.

=~es un operador que le permite comparar con una expresión regular, aunque =no tiene nada que ver con expresiones regulares. VerConstrucciones condicionales en Bash, [[con su =~se describe allí. El fragmento más importante:

Está disponible un operador binario adicional, =~, con la misma precedencia que ==y !=. Cuando se utiliza, la cadena a la derecha del operador se considera una expresión regular extendida POSIX y coincide en consecuencia […].

La prueba tiene éxito si la expresión regular coincide. El flujo de tu guión ( echo "not valid"sobre un partido) me hace creer que piensas que es al revés. Necesitas negar la prueba.

Para negar su prueba, colóquela !antes de [[:

if ! [[ "$URL" =~ $regex ]]; then

Alternativamente, puede negar la expresión dentro de [[ ]]:

if [[ ! "$URL" =~ $regex ]]; then

Además por favor leaComprensiónIFS= read -r liney tal vez ajuste su readcomando.

información relacionada