LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 983|回复: 0

BASH_REMATCH 在[[ =~ ]] 判定的问题

[复制链接]
发表于 2009-7-18 14:38:35 | 显示全部楼层 |阅读模式
很妖精的问题:
RedHat EL5 ( bash 3.2.25(1) ) 和Ubuntu 9.04 (bash 3.2.48(1) ) 在处理BASH_REMATCH 时不同, RedHat EL5 中要加“” ,Ubuntu 9.04中不能加双引号! 具体实力看下面:

RedHat EL5 ( bash 3.2.25(1) )

[kevin@server1 shell]# if [[ 192.168.1.1 =~ "^[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}$" ]] ; then echo ok ; else echo fail ; fi
ok

[kevin@server1 shell]# if [[ 192.168 =~ "^[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}$" ]] ; then echo ok ; else echo fail ; fi
fail

如不加“”
[kevin@server1 shell]# if [[ 192.168 =~ ^[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}$ ]] ; then echo ok ; else echo fail ; fi
ok


Ubuntu 9.04 (bash 3.2.48(1) )
kevin@kevin-laptop:[ shell] $ if [[ 192.168.1.1 =~ "^[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}$" ]] ; then echo ok ; else echo fail ; fi
fail

如不加“”

kevin@kevin-laptop:[ shell] $ if [[ 192.168.1.1 =~ ^[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}$ ]] ; then echo ok ; else echo fail ; fi
ok

kevin@kevin-laptop:[ shell] $ if [[ 192.168 =~ ^[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}$ ]] ; then echo ok ; else echo fail ; fi
fail

很诡异!
有知道具体原因或实现细节的朋友请回复!
您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表