You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Vidar Holen edited this page Aug 23, 2021
·
1 revision
'expr' expects 3+ arguments but sees 1. Make sure each operator/operand is a separate argument, and escape <>&|.
Problematic code:
# | not escaped
expr 1 | 2
# > not escaped
expr "$foo">= "$bar"# Missing spaces around +
expr 1+2
# Unexpected quoting around an expression
expr "1 + 2"
Correct code:
expr 16 \| 7
expr "$foo"\>= "$bar"
expr 1 + 2
Rationale:
ShellCheck found an expr command with 1 or 2 arguments. expr normally expects 3 or more.
Generally, this happens for one of two reasons:
You are using an operator like |, &, >, >=, <, <=, which needs to be escaped to avoid the shell interpreting it as a pipe, backgrounded command, or redirection.
You don't have spaces around operators and operands (or have bad quotes) which causes them not to be separate arguments.
Make sure each operator or operand to expr is a separate argument, and that anything containing shell metacharacters is escaped. The correct code shows examples of each.
Exceptions:
None
Related resources:
Help by adding links to BashFAQ, StackOverflow, man pages, POSIX, etc!