En ocasiones es conveniente utilizar la salida de un comando como si fuera el contenido de un fichero que se quiere pasar a otro comando como argumento.
El caso más común con el que yo me encuentro es comparar la salida de dos comandos. Por ejemplo comparar las diferencias entre revisiones de dos ficheros.
git diff mainline -- file1 git diff mainline -- file2
Puesto que diff espera como argumentos nombres de ficheros la solución más inmediata sería enviar la salida de cada comando a un fichero distinto y comparar ambos ficheros. Sin embargo, esto no queda muy bien que digamos.
Afortunadamente los desarrolladores de Bash y Zsh (entre otros intérpretes de comandos) tampoco estaban contentos con esa chapuza, así que implementaron la capacidad llamada Sustitución de Proceso.
La sustitución de procesos permite que la salida (o la entrada) sea referida como un nombre de fichero. Así, la ejecución de diff sobre la salida de los dos comandos anteriores se expresaría de la siguiente forma:
diff <(git diff mainline -- file1) <(git diff mainline -- file2)
Si lo que se quiere es utilizar la entrada de un comando como fichero se expresaría del siguiente modo:
date > >(cat)
Sí, ya sé que es un ejemplo un poco cutre, pero se entiende.