Pattern: Use of expr
Issue: -
expr
utility has a rather difficult syntax. In many cases, the arithmetic and string features provided as part of the shell command language are easier to use than their equivalents in expr
. Newly written scripts should avoid expr
in favor of the new features within the shell.
Example of incorrect code:
i=$(expr 1 + 2)
l=$(expr length "$var")
Example of correct code:
i=$((1+2))
l=${#var}
sh
doesn't have a great replacement for the :
operator (regex match). ShellCheck tries not to warn when using expr with :
, but e.g. op=:; expr string "$op" regex
will still trigger it.
Other than that, all uses of expr
can be rewritten to use modern shell features instead.
Bash has [[ string =~ regex ]]
, so not even expr .. : ..
is necessary.