在正则表达式中使用“=”时出现 Shell 脚本错误

问题描述 投票:0回答:1

如果我在正则表达式的第一个和第二个字符类中添加“=”,为什么下面的脚本会失败。

#! /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

当我删除“=”时它工作正常,它是否有任何特殊含义。

linux bash shell scripting
1个回答
0
投票

=
不是问题,破折号
-
才是问题。

破折号在字符类中具有特殊含义:它引入一个范围。将其放在类的第一个或最后一个以使其与文字破折号匹配:

if [[ $email =~ ^[a-zA-Z0-9._%=+-]+\@[a-zA-Z0-9.=+-]+\.[a-zA-Z]{2,}$ ]]
#                               ~                 ~       
© www.soinside.com 2019 - 2024. All rights reserved.