Command substitution involves substituting a command with its output. This can either be directly replaced as variable substitution on the command-line or piped into a virtual file as file substitution. The latter is useful when using command substition with a command that is expecting a filename eg. cat.
In variable subtition the output of the command directly replaces the command.
$(command with arguments)
$ echo Most recent file is: $(ls -ltr|tail -1) $ Most recent file is : -rwxr-xr-x 1 benyg benyg 4820 Sep 13 09:22 test.sh
In file substitution the output of the command is inserted in a virtual file and is substituting an argument that requires a filename.
<(command with arguments)
$ echo $(date) Thu Sep 15 09:10:22 BST 2011 $ cat $(date) cat: Thu: No such file or directory cat: Sep: No such file or directory cat: 15: No such file or directory cat: 09:10:28: No such file or directory cat: BST: No such file or directory cat: 2011: No such file or directory $ cat <(date) Thu Sep 15 09:10:37 BST 2011