SC2076 – ShellCheck Wiki

See this page on GitHub


Don't quote rhs of =~, it'll match literally rather than as a regex.

Problematic code:

[[ $foo =~ "^fo+ bar$" ]]

Correct code:

[[ $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"* ]].



ShellCheck is a static analysis tool for shell scripts. This page is part of its documentation.