cp $@ ~/dir
cp "$@" ~/dir
Double quotes around $@
(and similarly,
${array[@]}
) prevents globbing and word splitting of
individual elements, while still expanding to multiple separate
arguments.
Let's say you have four arguments: baz
,
foo bar
, *
and /*/*/*/*
"$@"
will expand into exactly that: baz
,
foo bar
, *
and /*/*/*/*
$@
will expand into multiple other arguments:
baz
, foo
, bar
,
file.txt
, otherfile.jpg
, and (eventually) a
list of most files on the system
Since the latter is rarely expected or desired, ShellCheck warns about it.
When you want globbing of individual elements.
ShellCheck is a static analysis tool for shell scripts. This page is part of its documentation.