在 Bash 中验证 YouTube 网址时出错

在 Bash 中验证 YouTube 网址时出错

我有以下代码:

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

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

我输入网址: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...

我不明白,验证 YouTube 上的 URL 的正确方法是什么?

答案1

里面[[ ]] =~不是否定的=

=~是一个允许你匹配正则表达式的运算符,而=与正则表达式无关。请参阅Bash 中的条件构造[[=~在那里进行了描述。最重要的片段:

=~还有一个额外的二元运算符, ,其优先级与==和相同!=。使用时,运算符右侧的字符串被视为 POSIX 扩展正则表达式,并进行相应的匹配 […]。

当且仅当正则表达式匹配,测试才成功。你的脚本流程(echo "not valid"匹配时)让我相信你认为情况正好相反。你需要否定测试。

要否定测试,请!在之前放置[[

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

或者,你可以否定其中的表达式[[ ]]

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

另外请阅读理解IFS= read -r line并可能调整你的read命令。

相关内容