在 bash 中驗證來自 youtube 的 url 時出錯

在 bash 中驗證來自 youtube 的 url 時出錯

我有以下程式碼:

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命令。

相關內容