不同bash版本正则匹配结果不一致

不同的shell(如csh,bash等)的语法不一样,同样的shell的不同版本之间也可能差别很大,如下面的脚本

Shell代码 
  1. #!/bin/bash  
  2. string=500  
  3. if [[ ( $string =~ '^[0-9]+$' ) && ( "$string" -gt 10 ) ]];then  
  4.     echo "true"  
  5. else  
  6.     echo "false"  
  7. fi  

上面这段代码,在suse10运行为true,bash版本为

 

GNU bash, version 3.1.17(1)-release (x86_64-suse-linux)

Copyright (C) 2005 Free Software Foundation, Inc.

 

 

Shell代码 
  1. # sh -x aaa.sh  
  2. + string=500  
  3. + [[ 500 =~ ^[0-9]+$ ]]  
  4. + [[ 500 -gt 10 ]]  
  5. + echo true  
  6. true  
 
在suse11上运行为false,bash版本为
suse11:~ # bash --version
GNU bash, version 3.2.51(1)-release (x86_64-suse-linux-gnu)
Copyright (C) 2007 Free Software Foundation, Inc.

Shell代码 
  1. # sh -x aaa.sh  
  2. + string=500  
  3. + [[ 500 =~ \^\[0-9]\+\$ ]]  
  4. + echo false  
  5. false  
  感谢网友的解释
if [[ ( $string =~ '^[0-9]+$' ) && ( "$string" -gt 10 ) ]];then
suse11里面,去掉里面的单引号,应该是才ok的
不然被系统当做字符转义了+ [[ 500 =~ \^\[0-9]\+\$ ]

suse10里就不清楚了
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值