
次のコードがあります:
read -p ":" URL
regex='^(https?\:\/\/)?(www\.youtube\.com)\/.+$'
if [[ "$URL" =~ $regex ]]; then
echo "not valid url "
exit
fi
echo 'Init fnction'
Init FUnction
URLを入力します: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
ください。