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/?
请参阅 的联机帮助页ls,即标志-1:
-1(数字“一”。)强制输出为每行一个条目。 当输出不输出到终端时,这是默认设置。
如果你想强制多列输出使用
-C 强制多列输出;这是输出到终端时的默认设置。
因此,要回答您的问题,是的,ls要知道输出的去向,并且它具有明确定义的行为,具体取决于您可以轻松覆盖的行为。