Grep: 正则表达式不匹配 IP
问题的出现原因是,原始代码中使用了两个不同的正则表达式(RX1和RX2)来检查IP地址的有效性。而实际上,只需要使用一个正则表达式就可以完成这个检查。
解决方法是,在代码中将两个正则表达式合并成一个,并将其定义为一个变量(RX)。然后,通过将变量引用传递给[[...]],来进行IP地址的有效性检查。
下面是修改后的代码:
SOURCE="8.8.8.8" RX="^[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}(/[0-9]{1,2})?$" if ! [[ $SOURCE =~ $RX ]];then echo ERROR: Invalid Source exit 1 fi
这样修改后的代码只使用一个正则表达式(RX),而不再需要使用两个(RX1和RX2)。这样代码更简洁、更易读,同时也能正确地检查IP地址的有效性。
需要注意的是,将正则表达式放入变量中是最安全的方式,因为在[[...]]中,变量扩展可能会发生。详细信息可以参考这个[Stack Overflow回答](http://stackoverflow.com/a/18710850/3832970)。