我有以下代码:
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 上验证网址的正确方法是什么?
里面
[[ ]]
=~
不是否定的=
。=~
是一个运算符,允许您匹配正则表达式,而=
与正则表达式无关。请参阅Bash 中的条件构造,[[
其中对其=~
进行了描述。最重要的片段:如果正则表达式匹配,则测试成功。你剧本的流程(
echo "not valid"
在比赛中)让我相信你认为这是相反的。你需要否定测试。要否定您的测试,请放置
!
在[[
:或者,您可以否定
[[ ]]
:此外,请阅读理解
IFS= read -r line
并调整您的read
命令。