Skip to content

Files

Latest commit

 

History

History
31 lines (19 loc) · 1.02 KB

SC2304.md

File metadata and controls

31 lines (19 loc) · 1.02 KB

Pattern: Use of unescaped *

Issue: -

Description

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.

Example of incorrect code:

result=$(expr 2 * 3)

Example of correct code:

# Modern, efficient, POSIX standard approach
result=$(( 2 * 3 ))

# Older, slower approach
result=$(expr 2 \* 3)

Further Reading