ошибка проверки URL-адреса с YouTube в Bash

ошибка проверки URL-адреса с YouTube в Bash

У меня есть следующий код:

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

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

Я ввожу URL:https://www.asdasd.com/watch?v=nD8WpYD_P94

но скрипт не получается как надо: вывод:

+ 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...

Я не понимаю, как правильно проверить URL на YouTube?

решение1

Внутри [[ ]] =~не отрицается =.

=~— оператор, который позволяет вам сопоставлять с регулярным выражением, при этом =не имеет ничего общего с регулярными выражениями. СмотритеУсловные конструкции в Bash, [[с его =~описанным там. Самый важный фрагмент:

=~Доступен дополнительный бинарный оператор, , с тем же приоритетом, что ==и !=. При его использовании строка справа от оператора считается расширенным регулярным выражением POSIX и сопоставляется соответственно […].

Тест проходит успешно, если регулярное выражение совпадает. Поток вашего скрипта ( echo "not valid"при совпадении) заставляет меня думать, что вы думаете, что все наоборот. Вам нужно отменить тест.

Чтобы отрицать ваш тест, поместите !перед [[:

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

В качестве альтернативы вы можете отрицать выражение внутри [[ ]]:

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

Дополнительно, пожалуйста, прочтитеПониманиеIFS= read -r lineи, возможно, скорректируйте свою readкоманду.

Связанный контент