Skip to content
Vidar Holen edited this page Apr 15, 2024 · 1 revision

This redirection takes output away from the command substitution.

(and companion warning "This command substitution will be empty because the command's output gets redirected away" which points to the relevant command substitution)

Problematic code:

var=$(tr -d ':' < input.txt > output.txt)

Correct code:

# If the output should be captured INSTEAD OF being written to file
var=$(tr -d ':' < input.txt)

# If the output should be captured IN ADDITION to being written to file
var=$(tr -d ':' < input.txt | tee output.txt)

# If the output should NOT BE captured at all
tr -d ':' < input.txt > output.txt

Rationale:

ShellCheck has found a command substitution ($(..), `..`) that appears to never capture any output because the command's output is being redirected.

Decide whether you want the output to be captured (by removing the redirection), to go into wherever it's redirected (by not running the command in a command substitution), or both (by using tee to copy the output to both file and stdout).

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