SC2021
Joachim Ansorg edited this page Nov 12, 2021
·
2 revisions
Don't use [] around ranges in tr, it replaces literal square brackets.
Problematic code:
tr -cd '[a-z]'Correct code:
tr -cd 'a-z'Rationale:
Ancient System V tr required brackets around operands, but modern implementations including POSIX, GNU, OS X and *BSD instead treat them as literals.
Unless you want to operate on literal square brackets, don't include them.
Exceptions:
If you do want to replace literal square brackets, reorder the expression (e.g. a-z[] to make it clear that the brackets are not special).
ShellCheck does not warn about correct usage of [..] in character and equivalence classes like [:lower:] and [=e=].