管道操作员是否修改其输入/输出?或者是否知道管道?

ash*_*ash 5 linux bash grep ls pipe

考虑以下...当我执行'ls'而没有任何标志时,它会将结果返回到一行,如下所示:

me@myComp /cygdrive/c/test/
$ ls
folder1/  folder2/  folder3/
Run Code Online (Sandbox Code Playgroud)

现在,如果我想对结果进行grep,说'2',我会得到以下结果:

me@myComp /cygdrive/c/test/
$ ls | grep 2
folder2/
Run Code Online (Sandbox Code Playgroud)

它不应该返回整条线路吗?我希望我用过这个结果ls -l | grep 2.

在我看来,管道操作员正在以某种方式将输入更改为grep,或者以某种方式ls意识到管道并更改其自己的输出.

folder1/ folder2/ folder3/是单个字符串,不是吗?那么grep怎么知道只返回folder2/,而不是folder1/ folder2/ folder3/

Nit*_*Nit 4

请参阅 的联机帮助页ls,即标志-1

-1(数字“一”。)强制输出为每行一个条目。 当输出不输出到终端时,这是默认设置。

如果你想强制多列输出使用

-C 强制多列输出;这是输出到终端时的默认设置。

因此,要回答您的问题,是的,ls知道输出的去向,并且它具有明确定义的行为,具体取决于您可以轻松覆盖的行为。