1 SC2305
Vidar Holen edited this page 2021-08-22 20:14:10 -07:00

Quote regex argument to expr to avoid it expanding as a glob.

Problematic code:

expr "$input" : [0-9]*

Correct code:

expr "$input" : "[0-9]*"

Rationale:

ShellCheck found an expr command using : to match a regex, but the regex is not quoted and therefore being treated as a glob.

This means that if the problematic code is ever executed in a directory containing a file matching [0-9]*, such as 2021-reports or 12 Angry Men [1957].mkv, it will be replaced be replaced and cause the command to error or incorrectly match.

The regex should be quoted to avoid this, like in the correct example.

Exceptions:

None

  • Help by adding links to BashFAQ, StackOverflow, man pages, POSIX, etc!