cmd < file | ..
or
cmd file | ..
instead.This suggestion was enabled by default up to and including ShellCheck 0.10.0.
In later versions, it is optional. It must be
explicitly enabled with a directive
enable=useless-use-of-cat
in a # shellcheck
comment or .shellcheckrc
cat file | tr ' ' _ | nl
cat file | while IFS= read -r i; do echo "${i%?}"; done
< file tr ' ' _ | nl
while IFS= read -r i; do echo "${i%?}"; done < file
cat
is a tool for con"cat"enating files. Reading a
single file as input to a program is considered a Useless
Use Of Cat (UUOC).
It's more efficient and less roundabout to simply use redirection.
This is especially true for programs that can benefit from seekable
input, like tail
or tar
.
Many tools also accept optional filenames, e.g.
grep -q foo file
instead of
cat file | grep -q foo
.
Pointing out UUOC is a long standing shell programming tradition, and removing them from a short-lived pipeline in a loop can speed it up by 2x. However, it's not necessarily a good use of time in practice, and rarely affects correctness. Ignore as you see fit.
ShellCheck is a static analysis tool for shell scripts. This page is part of its documentation.