7 SC2060
Joachim Ansorg edited this page 2024-07-05 10:59:15 +02:00

Quote parameters to tr to prevent glob expansion.

Problematic code:

tr -cd [:digit:]

Correct code:

tr -cd '[:digit:]'

Rationale:

From the shell's point of view, unquoted [:digit:] is a glob equivalent to [digit:] that matches any single character filename from the group, such as d or t, in the current directory.

If someone starts learning D and creates a directory named d to hold the source code, the glob will be expanded and the script will end up executing tr -cd d instead, which is clearly unintended.

Quoting the argument prevents this, and will pass it correctly as the literal string [:digit:] no matter which files exist in the current directory.

Exceptions

None