SC2005 – ShellCheck Wiki

See this page on GitHub


Useless echo? Instead of echo $(cmd), just use cmd

Problematic code:

echo "$(whoami)"

Correct code:



ShellCheck found the unnecessary construct echo "$(somecommand here)".

This is generally due to a misunderstanding about what echo does. It has no role in "showing on screen" or similar, but simply writes a string to standard output. This is also how all other programs output data.

echo "$(somecommand)" will capture the output somecommand writes to standard output and write it to standard output, where it was already going. At best this is a no-op, but it may have several other negative effects:

To avoid all this, simply replace echo "$(somecommand)" with somecommand as in the example. It's shorter, faster, and more correct.


If you are relying on one of the otherwise detrimental effects for correctness, you can consider one of:

# Suppress exit code without the other negative effects
cmd || true

# Disable tty specific output without the other negative effects
cmd | cat

# Buffer up potentially large output without using more memory or modifying the content in any way
cmd > file.tmp
cat file.tmp

# Exactly like `echo "$(cmd)"`, but allows output like `-n` and works the same across shells
printf '%s\n' "$(cmd)"

ShellCheck is a static analysis tool for shell scripts. This page is part of its documentation.