< <(cmd), not
while read -r line do echo "You said: $line" done <<(cmd)
while read -r line do echo "You said: $line" done < <(cmd)
< from a process substitution
<(cmd), make sure there is a space between the two
< characters as shown in the example.
With a space
cmd1 < <(cmd2), is correctly interpreted as "run cmd1, reading stdin from cmd2, without forking for a pipeline".
Without a space,
<< is incorrectly considered a here document, and
(cmd2) is an invalid delimiter token.
ShellCheck is a static analysis tool for shell scripts. This page is part of its documentation.