语句cat a.txt | wc
和语句wc < cat a.txt
有什么区别。在这两种情况下,都不会将cat a.txt
的输出定向到wc
吗?
答案 0 :(得分:1)
绝对不是。在第二种情况(wc < cat a.txt
中,您正在调用命令wc a.txt
,同时将名为cat
的文件连接到流程的标准输入。
这似乎令人困惑,但是大多数shell允许您将输入重定向到命令行中的任何位置。
wc a.txt < cat
将与(可能更加混乱)
相同wc < cat a.txt
要将命令的输出重定向到另一个命令的输入,请使用竖线字符。要使用文件作为标准输入来调用命令,请使用V形符号。
现在,现代的shell可以让您键入如下命令:
wc <(cat a.txt)
这称为进程替换,它与您要问的两种方法都不完全相同。在这种情况下,外壳程序将调用进程cat a.txt
并将其输出“捕获”到文件描述符中。然后,外壳程序将调用“ main”命令(wc),并将对该文件描述符的引用作为参数传递,就好像它是文件名一样。它使期望简单文件名的命令能够读取 ad 命令的输出。