Process substitution is written using parentheses and behind the scenes uses named pipes. #### Example 1 ```plaintext cat <(ls) <(echo hello) ``` This takes the command `ls` and sends its output to a named pipe (say `pipe_a`), does similar with the echo command, to say `pipe_b`, and then runs `cat` as ```plaintext cat pipe_a pipe_b ``` The actual pipe filenames will look something like ```plaintext /dev/fd/11 ``` as you can verify by running e.g. ```plaintext echo <(ls) ``` Note that this does //not// use stdin, and requires that the command (here `cat`) reads from files specified on the command line.