
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 line
y tal vez ajuste su read
comando.