不同的shell(如csh,bash等)的语法不一样,同样的shell的不同版本之间也可能差别很大,如下面的脚本
- #!/bin/bash
- string=500
- if [[ ( $string =~ '^[0-9]+$' ) && ( "$string" -gt 10 ) ]];then
- echo "true"
- else
- echo "false"
- fi
上面这段代码,在suse10运行为true,bash版本为
GNU bash, version 3.1.17(1)-release (x86_64-suse-linux)
Copyright (C) 2005 Free Software Foundation, Inc.
- # sh -x aaa.sh
- + string=500
- + [[ 500 =~ ^[0-9]+$ ]]
- + [[ 500 -gt 10 ]]
- + echo true
- 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.
- # sh -x aaa.sh
- + string=500
- + [[ 500 =~ \^\[0-9]\+\$ ]]
- + echo false
- false
感谢网友的解释
“
if [[ ( $string =~ '^[0-9]+$' ) && ( "$string" -gt 10 ) ]];then
suse11里面,去掉里面的单引号,应该是才ok的
不然被系统当做字符转义了+ [[ 500 =~ \^\[0-9]\+\$ ]
suse10里就不清楚了
suse11里面,去掉里面的单引号,应该是才ok的
不然被系统当做字符转义了+ [[ 500 =~ \^\[0-9]\+\$ ]
suse10里就不清楚了
”