3 SC2293
Vidar Holen edited this page 2021-07-30 18:54:53 -07:00

When eval'ing @Q-quoted words, use * rather than @ as the index.

Problematic code:

eval "$MYCOMMAND ${@@Q}"

Correct code:

eval "$MYCOMMAND ${*@Q}"

Rationale:

ShellCheck noticed that you are calling eval and including an escaped array. However, the array is passed as multiple arguments and relies on being implicitly joined together to form a single shell string, which eval can then evaluate.

Instead, prefer building your shell string with explicit string concatenation by using * instead of @ for the index, such as ${*@Q} or ${array[*]@Q}.

This suggestion is equivalent to SC2124, but for eval arguments rather than string variables.

Exceptions:

None.

  • Help by adding links to BashFAQ, StackOverflow, man pages, POSIX, etc!