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

时间:2014-02-28 16:40:28

标签: linux bash grep pipe ls

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

me@myComp /cygdrive/c/test/
$ ls
folder1/  folder2/  folder3/

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

me@myComp /cygdrive/c/test/
$ ls | grep 2
folder2/

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

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

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

1 个答案:

答案 0 :(得分:4)

请参阅ls的联系人页面,即标记-1

  

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

如果要强制使用多列输出

  

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

所以要回答你的问题,是的,ls 意识到输出的位置,它具有明确定义的行为,具体取决于你可以轻易覆盖的行为。