
我有以下程式碼:
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 上的網址的正確方法是什麼?
答案1
裡面[[ ]]
=~
不是否定的=
。
=~
是一個允許您與正規表示式進行比對的運算符,而=
與正規表示式無關。看Bash 中的條件結構,[[
其=~
描述在那裡。最重要的片段:
另外還有一個二元運算子 ,
=~
可用,其優先權與==
和相同!=
。使用時,運算子右側的字串被視為 POSIX 擴展正則表達式並進行相應的匹配 [...]。
當且僅當正規表示式匹配時測試成功。你的劇本流程(echo "not valid"
在一場比賽中)讓我相信你認為情況恰恰相反。您需要否定測試。
若要否定您的測試,請!
放在[[
:
if ! [[ "$URL" =~ $regex ]]; then
或者,您可以否定 內的表達式[[ ]]
:
if [[ ! "$URL" =~ $regex ]]; then
另外請閱讀理解IFS= read -r line
也許可以調整你的read
命令。