-
Notifications
You must be signed in to change notification settings - Fork 1.8k
SC2304
Vidar Holen edited this page Aug 23, 2021
·
2 revisions
result=$(expr 2 * 3)
# Modern, efficient, POSIX standard approach
result=$(( 2 * 3 ))
# Older, slower approach
result=$(expr 2 \* 3)
ShellCheck found an expr
command whose operator is an unescaped asterisk *
.
When using expr
, each argument is expanded the same way as for any other command. This means that expr 2 * 3
will turn into expr 2 Desktop Documents Downloads Music Pictures 3
depending on the files in the current directory, causing an error like expr: syntax error: unexpected argument ‘Desktop’
The best way to avoid this is to avoid expr
and instead use $((..))
instead. If you for any reason prefer the 200x slower, heavyweight process of forking a new process, you can escape the *
. Both ways are demonstrated in the correct example.
None
- Help by adding links to BashFAQ, StackOverflow, man pages, POSIX, etc!