考虑以下…当我执行’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 /?
最佳答案
请参阅ls的联机帮助页,即标志-1:
-1 (The numeric digit “one”.) Force output to be one entry per@H_301_32@ line. This is the default when output is not to a terminal.
如果要强制使用多列输出
-C Force multi-column output; this is the default when output is to@H_301_32@ a terminal.
所以要回答你的问题,是的,ls知道输出的去向,并且它具有明确定义的行为,具体取决于你可以轻易覆盖的行为.