我正在尝试添加正则表达式验证以读取-p,例如域名。
当前代码:
read -p "Do Something": dosomething
echo working on $dosomething
感谢您提供每个验证邮件的更新,我试图找出是否有可能对read -p
进行正则表达式验证。
答案 0 :(得分:1)
使用循环:
email=""
until [[ $email =~ $regex ]] ; do
read -p 'Enter your email: ' email
done
正则表达式
(?:[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*|"(?:[\x01-\x08\x0b\x0c\x0e-\x1f\x21\x23-\x5b\x5d-\x7f]|\\[\x01-\x09\x0b\x0c\x0e-\x7f])*")@(?:(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?|\[(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?|[a-z0-9-]*[a-z0-9]:(?:[\x01-\x08\x0b\x0c\x0e-\x1f\x21-\x5a\x53-\x7f]|\\[\x01-\x09\x0b\x0c\x0e-\x7f])+)\])
不幸的是,在EmailRegex.com上显示的不兼容bash。
答案 1 :(得分:0)
简短的回答:可以肯定的是,read
可以做假设的事情。但是bash
的{{1}}的实现没有此功能,而且我不知道有任何与POSIX兼容的外壳,并且POSIX本身不包含此功能,尽管看起来像如果需要,实现可以添加为扩展的种类。如果您足够喜欢此功能,请考虑向read
提交补丁以添加它!
使用bash
进行验证很容易:只需使用循环读取一个值,检查它是否有效,否则请重试。如果您需要定期执行此操作,则可以将其编写为bash函数。