如果我在正则表达式的第一个和第二个字符类中添加“=”,为什么下面的脚本会失败。
#! /bin/bash
阅读 -p“输入电子邮件地址:” email
if [[ $email =~ ^[a-zA-Z0-9._%=-+]+@[a-zA-Z0-9.=-+]+\.[a-zA-Z]{2,}$ ]]
then
echo "Valid mail id "
else
echo "invalid mail id"
fi
当我删除“=”时它工作正常,它是否有任何特殊含义。
=
不是问题,破折号-
才是问题。
破折号在字符类中具有特殊含义:它引入一个范围。将其放在类的第一个或最后一个以使其与文字破折号匹配:
if [[ $email =~ ^[a-zA-Z0-9._%=+-]+\@[a-zA-Z0-9.=+-]+\.[a-zA-Z]{2,}$ ]]
# ~ ~