从右向左重定向

从右向左重定向

根据旧习惯,我总是“从左到右”重定向,例如。

  1. cat file | bar
  2. foo | bar

我注意到你可以“从右到左”重定向。但是,是否可以对第二种形式执行此操作(例如从一个程序到另一个程序)?

  1. bar < file
  2. bar ??? foo

另外,我很好奇何时使用“从左”与“从左”是否有任何约定。 “从右开始”,或者如果这只是偏好问题或最简短或最优雅的内容。

答案1

IIUC,你可以使用 Bash流程替代模拟第二种形式的功能:

$ echo foobar | grep bar
foobar
$ grep bar <(echo foobar)
foobar

请注意,要使此功能正常工作,使用的命令必须能够接受文件作为参数 -grep是吗?

答案2

一般来说,您可以将管道之间的命令|视为在子 shell 中运行。

所以

foo | bar

可以被认为是

(foo) | (bar)

因此,这可能有助于理解重定向如何适应事物。

foo < bar | baz

相当于

(foo < bar) | (baz)

即,输入将foo是文件bar,其输出将是输入baz

进程替换遵循相同的重定向规则:

foo <(echo bar) | baz

相当于

( foo <(echo bar) ) | (baz)

相关内容