[]
around ranges in tr
, it replaces
literal square brackets.tr -cd '[a-z]'
tr -cd 'a-z'
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.
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=]
.
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]
.
ShellCheck is a static analysis tool for shell scripts. This page is part of its documentation.