Bash regex issue

Emmett Culley emmett at webengineer.com
Sat Feb 5 15:51:59 UTC 2011


I have a bash script I've been using in CentOS that no longer works in Fedora 14. The pertinent lines are:

mac=`echo $2 | tr a-z A-Z`
if [[ "$mac" =~ '[0-9A-F][0-9A-F]:[0-9A-F][0-9A-F]:[0-9A-F][0-9A-F]:[0-9A-F][0-9A-F]:[0-9A-F][0-9A-F]:[0-9A-F][0-9A-F]' ]]; then
  echo 'good'
else
  echo 'Invalid MAC address'
fi

In CentOS or RHEL5 setting parameter 2 = 00:00:00:00:af:df works as expected, but not in Fedora.  By adding -x to the first line of the script the output to the terminal in CentOS looks like this:

++ echo 00:00:00:00:af:df
++ tr a-z A-Z
+ mac=00:00:00:00:AF:DF
+ [[ 00:00:00:00:AF:DF =~ [0-9A-F][0-9A-F]:[0-9A-F][0-9A-F]:[0-9A-F][0-9A-F]:[0-9A-F][0-9A-F]:[0-9A-F][0-9A-F]:[0-9A-F][0-9A-F] ]]
+ echo good
good

In Fedora it looks like this:

++ echo 00:00:00:00:af:df
++ tr a-z A-Z
+ mac=00:00:00:00:AF:DF
+ [[ 00:00:00:00:AF:DF =~ \[0-9A-F]\[0-9A-F]:\[0-9A-F]\[0-9A-F]:\[0-9A-F]\[0-9A-F]:\[0-9A-F]\[0-9A-F]:\[0-9A-F]\[0-9A-F]:\[0-9A-F]\[0-9A-F] ]]
+ echo 'Invalid MAC address'
Invalid MAC address

Note the "\" before each "[" in the regular expression.

Any ideas what is going on here?  Is there a better forum to ask this question?


More information about the users mailing list