Skip to content
Joachim Ansorg edited this page Nov 12, 2021 · 2 revisions

Unexpected tokens after compound command. Bad redirection or missing ;/&&/||/|?

Problematic code:

while echo "$2"; do true; done \
  head -n "$1"

while sleep 1; do date; done > my file

Correct code:

while echo "$2"; do true; done \
  | head -n "$1"

while sleep 1; do date; done > "my file"

Rationale:

ShellCheck found unexpected trailing characters after a compound command.

The only things allowed after compound commands are redirections, shell keywords, and the various command separators (;, &, |, &&, ||).

In the first example, a | was missing, causing head to appear as an unexpected trailing word, instead of being piped to. In the second example, a lack of quoting caused file to appear as an unexpected trailing word, instead of being part of the redirection.

Examine your statement and correct the problem.

Exceptions:

None

Related resources:

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

ShellCheck

Each individual ShellCheck warning has its own wiki page like SC1000. Use GitHub Wiki's "Pages" feature above to find a specific one, or see Checks.

Clone this wiki locally