A script is called with two arguments: `./run.sh "annual report" 2026`. How does `"$@"` differ from `"$*"` when the script passes them on to another command?

LPIC-1 Exam 102-500, objective 105. Shells and shell scripting hard

Machine-checked — no person has signed for it. This question was read against the source cited below by an automated pass, which found no contradiction. That is a weaker claim than it sounds: the same kind of process wrote the question, so it can confirm its own mistake.

Treat it as a good draft rather than as settled fact, and read the source below before you rely on it. It is not used in mock exams here — only questions a person has signed for are.

How these questions are written — where each question comes from, what the verification ledger records, and what happens when one is found wrong.

The options

Not correct They are identical; the two spellings are aliases for each other.

Wrong. Unquoted they behave alike, but quoted they differ, and quoting them is exactly what correct scripts do.

Not correct "$@" gives one word per argument and "$*" additionally drops empty arguments.

Wrong about "$*". It does not filter arguments; it concatenates all of them, empty ones included, into a single word.

Not correct "$@" includes $0 while "$*" does not.

Wrong. Neither includes $0. Both expand only the positional parameters starting at $1.

Correct "$@" expands to two separate words, `annual report` and `2026`, while "$*" expands to the single word `annual report 2026`.

Correct. "$@" preserves argument boundaries, one word per parameter. "$*" joins all parameters into one word, separated by the first character of IFS, normally a space.

Why

Use "$@" whenever you forward arguments, since it is the only form that keeps an argument containing spaces intact. "$*" is useful when you deliberately want one string, for example in a log message. Unquoted, $@ and $* behave the same and both split on whitespace, which loses the boundaries again.

Where this comes from

Cited
LPI exam objective 105.2
What it says
Pass the script's arguments on to other commands correctly.

Practise this

Reading one question is not practice. The trainer will draw a short set from objective 105 and space the ones you get wrong.

Practise LPIC-1 Exam 102-500

More questions on this objective

All questions on Shells and shell scripting

Practise LPIC-1 Exam 102-500