“wc -w <file.txt”如何工作?

Ste*_*eam 5 unix linux wc

我试图使用 wc 仅获取文件中的单词数。wc -w file.txt给我加上文件名。我不想要文件名。所以,我看到这wc -w < file.txt有效。

我不明白这个命令是如何工作的。我什至无法在看到此命令的答案下方添加评论。

为什么在 的情况下不打印文件名wc -w < file.txt

pax*_*blo 5

wc -w将输出每个参数的字数和文件名。所以命令wc -w myfile.txt会给你类似的东西:

42 myfile.txt
Run Code Online (Sandbox Code Playgroud)

但是, wherewc知道文件名,它只是输出计数。您可以通过使用输入重定向来隐藏文件名,因为wc如果您没有明确命名文件,这些命令将读取标准输入。这可以通过以下方式完成:

wc -w <myfile.txt
Run Code Online (Sandbox Code Playgroud)

或者:

cat myfile.txt | wc -w
Run Code Online (Sandbox Code Playgroud)

尽管后者在这种情况下效率低下,但在输入比某些文件的内容更复杂的情况下效果更好。

原因wc不知道文件名wc -w <myfile.txt是因为外壳打开文件,并将其附加到标准输入wc过程。shell 也从不将 传递<myfile.txtwc程序的命令行参数。许多程序的wc代码如下:

FILE * infile;
if (argc == 0)
    infile = stdin;
else
    infile = fopen (argv[1]], "r");
Run Code Online (Sandbox Code Playgroud)

选择标准输入或打开已知文件名。在前一种情况下,程序没有可用的名称。