Fehler beim Validieren der URL von YouTube in Bash

Fehler beim Validieren der URL von YouTube in Bash

Ich habe folgenden Code:

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

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

Ich gebe die URL ein:https://www.asdasd.com/watch?v=nD8WpYD_P94

aber das Skript ist nicht so gut wie gültig: Ausgabe:

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

Ich verstehe nicht, wie man eine URL auf YouTube richtig validiert?

Antwort1

Im Inneren [[ ]] =~liegt kein negiertes vor =.

=~ist ein Operator, der es Ihnen ermöglicht, mit einem regulären Ausdruck zu vergleichen, während =er nichts mit regulären Ausdrücken zu tun hat. SieheBedingte Konstrukte in Bash, [[mit seiner =~Beschreibung dort. Das wichtigste Fragment:

Ein zusätzlicher binärer Operator, =~, ist verfügbar, mit derselben Priorität wie ==und !=. Wenn er verwendet wird, wird die Zeichenfolge rechts vom Operator als erweiterter regulärer POSIX-Ausdruck betrachtet und entsprechend abgeglichen […].

Der Test ist erfolgreich, wenn der reguläre Ausdruck übereinstimmt. Der Ablauf Ihres Skripts ( echo "not valid"bei einer Übereinstimmung) lässt mich glauben, dass Sie denken, es sei umgekehrt. Sie müssen den Test negieren.

Um Ihren Test zu negieren, platzieren Sie !vor dem [[:

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

Alternativ können Sie den Ausdruck innerhalb von negieren [[ ]]:

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

Lesen Sie außerdem bitteVerständnisIFS= read -r lineund passen Sie readmöglicherweise Ihren Befehl an.

verwandte Informationen