SC2328 – ShellCheck Wiki

See this page on GitHub


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


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



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