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".

Clone this wiki locally