`<`运算符在shell中做什么?

What does the `<` operator do in shell?

我在读这个问题,有人试图从shell中获取文件中的行数。从评论中,我看到并实施了以下内容:

1
2
3
4
5
$ wc -l myfile.txt
30213 myfile.txt

$ wc -l < <filename>
30213

我不明白的是,<操作员在这里做什么。有人能解释为什么在这种情况下,<操作符会从输出中删除文件名吗?


wc在读取文件时,将文件名作为输出的一部分输出。

<按照"箭头"的方向重定向文件/程序之间的输入和输出。有关I/O重定向的更多信息,这是一个非常方便的链接。文件名被"切掉"的原因是因为wc在技术上不再从文件中读取。


在第一种情况下,当调用wc时,filename作为参数提供,这会导致wc将其包含在输出中。

在第二种情况下,stdin从filename重定向,这使得wc"不知道"文件,因此无法打印其名称。这相当于调用cat filename | wc -l

因此,为了回答您的问题,操作员<将输入文件描述符重定向到从给定文件读取。如果没有显式指定描述符编号,那么它默认为标准输入(fd 0)。有关正式参考,请参阅此处,有关方便的描述,请参阅此处。