diff --git a/SC2060.md b/SC2060.md index 1c8a516..1b0ca2c 100644 --- a/SC2060.md +++ b/SC2060.md @@ -14,7 +14,11 @@ tr -cd '[:digit:]' ### Rationale: -`[:digit:]` is a shell glob that matches any single character file named e.g. `g` or `t` in the current directory. Quoting it prevents the script from breaking in directories with files like this. +From the shell's point of view, unquoted `[:digit:]` is glob equivalent to `[dgit:]` that matches any single character filename from the group, such as `g` 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`, 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