2 SC1142
Joachim Ansorg edited this page 2021-11-12 19:13:06 +01:00

Use done < <(cmd) to redirect from process substitution (currently missing one <).

Problematic code:

sum=0
while IFS="" read -r n
do
  (( sum += n ))
done <(file) 

Correct code:

sum=0
while IFS="" read -r n
do
  (( sum += n ))
done < <(file) 

Rationale:

ShellCheck found a done keyword followed by a process substitution, e.g. done <(cmd).

The intention was most likely to redirect from this process substitution, in which case you will need one extra <: done < <(cmd).

This is because <(cmd) expands to a filename (e.g. /dev/fd/63), and you need a < to redirect from filenames.

Exceptions:

None

  • Help by adding links to BashFAQ, StackOverflow, man pages, POSIX, etc!