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=]
.
Note:
Busybox requires CONFIG_FEATURE_TR_CLASSES
for this to work. If busybox was compiled without this feature, character classes will obviously not be available, and the correct usage is to use a-z
, not [a-z]
.
-
Installation
-
Usage
-
Integrating and extending
Each individual ShellCheck warning has its own wiki page like SC1000. Use GitHub Wiki's "Pages" feature above to find a specific one, or see Checks.