-
Notifications
You must be signed in to change notification settings - Fork 1.8k
SC2076
[[ $foo =~ "^fo+ bar$" ]]
[[ $foo =~ ^fo+\ bar$ ]]
Quotes on the right hand side of =~
can be used to match literally, so that [[ $1 =~ ^"$2".* ]]
works even if $2
contains regex metacharacters. This mirrors the behavior of globs, [[ $1 = "$2"* ]]
.
This also means that the problematic code tries to match literal carets and plus signs instead of interpreting them as regular expression matchers. To match as a regex, the regex metacharacters it must be unquoted. Literal parts of the expression can be quoted with double or single quotes, or escaped.
If you do want to match literally just to do a plain substring search, e.g. [[ $foo =~ "bar" ]]
, you could ignore this message, but consider using a more canonical glob match instead: [[ $foo == *"bar"* ]]
.
- In Bash 3.2 and newer with shopt
compat31
disabled (the default), quoted patterns are literal whereas unquoted patterns are parsed for regex metacharacters. - In Bash 3.2 and newer with shopt
compat31
enabled, quoted and unquoted patterns match identically. - In Bash 3.1 quoted and unquoted patterns match identically.
See http://stackoverflow.com/questions/218156/bash-regex-with-quotes