Skip to content
koalaman edited this page Jul 11, 2014 · 13 revisions

Use semicolon or linefeed before 'done' (or quote to make it literal).

Problematic code:

for f in *; do echo "$f" done

Correct code:

for f in *; do echo "$f"; done

Rationale:

done only works as a keyword when it's the first token of the command. If added after a command, it will just be the literal word "done".

Contraindications

If you're intentionally using done as a literal, you can quote it to make this clear to shellcheck and human readers, e.g. instead of echo Task is done, use echo "Task is done".

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