尝试计算当前目录中的文件数时,我发现ls -1 | wc -l
,这意味着:将文件列表(每个文件名都打印在新行中)发送到wc的输入,其中-l
将计算输入中的行数。这是有道理的。
我决定尝试简单ls | wc -l
,对此感到非常惊讶,它还为我提供了正确数量的文件。我不知道为什么会这样,因为ls
没有选项的命令将文件名打印在一行上。
来自info ls
:
'-1'
'--format =单列'每行列出一个文件。当标准输出不是终端时,这是“ ls”的默认设置。
用管道传输的输出时ls
,每行只有一个文件名。
ls
仅当输出注视人眼时才输出列中的文件。
这是ls
决定要做什么的地方:
switch (ls_mode)
{
case LS_MULTI_COL:
/* This is for the 'dir' program. */
format = many_per_line;
set_quoting_style (NULL, escape_quoting_style);
break;
case LS_LONG_FORMAT:
/* This is for the 'vdir' program. */
format = long_format;
set_quoting_style (NULL, escape_quoting_style);
break;
case LS_LS:
/* This is for the 'ls' program. */
if (isatty (STDOUT_FILENO))
{
format = many_per_line;
/* See description of qmark_funny_chars, above. */
qmark_funny_chars = true;
}
else
{
format = one_per_line;
qmark_funny_chars = false;
}
break;
default:
abort ();
}
来源:http : //git.savannah.gnu.org/cgit/coreutils.git/tree/src/ls.c
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句