<p>The following code</p>

<pre><code>number=1
if [[ $number =~ [0-9] ]]
then
  echo matched
fi
</code></pre>

<p>works. If I try to use quotes in the regex, however, it stops:</p>

<pre><code>number=1
if [[ $number =~ "[0-9]" ]]
then
  echo matched
fi
</code></pre>

<p>I tried <code>"\[0-9\]"</code>, too. What am I missing?</p>

<p>Funnily enough, <a href="http://www.tldp.org/LDP/abs/html/abs-guide.html#REGEXMATCHREF" rel="noreferrer">bash advanced scripting guide</a> suggests this should work.</p>

<p>Bash version 3.2.39.</p>

It was changed
between 3.1 and 3.2
. Guess the advanced guide needs an update.
This is a terse description of the new
  features added to bash-3.2 since the
  release of bash-3.1.  As always, the
  manual page (doc/bash.1) is the place
  to look for complete descriptions.
New Features in Bash
snip
f.  Quoting the string argument to the
  [[ command's  =~ operator now forces
      string matching, as with the other pattern-matching operators.
Sadly this'll break existing quote using scripts unless you had the insight to store patterns in variables and use them instead of the regexes directly. Example below.
```
```
$ bash --version
GNU bash, version 3.2.39(1)-release (i486-pc-linux-gnu)
Copyright (C) 2007 Free Software Foundation, Inc.
$ number=2
$ if [[ $number =~ "[0-9]" ]]; then echo match; fi
$ if [[ $number =~ [0-9] ]]; then echo match; fi
match
$ re="[0-9]"
$ if [[ $number =~ $re ]]; then echo MATCH; fi
MATCH

$ bash --version
GNU bash, version 3.00.0(1)-release (i586-suse-linux)
Copyright (C) 2004 Free Software Foundation, Inc.
$ number=2
$ if [[ $number =~ "[0-9]" ]]; then echo match; fi
match
$ if [[ "$number" =~ [0-9] ]]; then echo match; fi
match
```
```