Este enlace es relevante. ¿Cuál es la diferencia entre la sustitución y la canalización para golpear? Pero no entiendo todo lo que se dice.
¿Cuál es la diferencia entre piping command1 | command2
versus expandir comandos command2 $(command1)
? Por ejemplo
vi $(find /home | grep xyzzy)
escupe los resultados a vi para editar mientras que
find /home | grep xyzzy | vi
no parece funcionar para mí. Pero no entiendo la diferencia fundamental.
Editar
Otras publicaciones relevantes
Sustitución de proceso y tubería
Sustitución de proceso y tubería
Respuesta aceptada:
A|B
ejecuta A y B (en paralelo), y la salida estándar de A se alimenta a la entrada estándar de B. En el caso de
A $(B)
el shell ejecuta primero B, recopila la salida estándar de B, luego ejecuta A, pero para esta ejecución asigna las palabras individuales al vector ARGV de A (es decir, A puede acceder a estas palabras mediante el mecanismo argv habitual conocido de C y otros lenguajes ).
Aparte del hecho de que en ambos casos están involucrados dos programas A y B, no veo nada similar entre ellos.