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

时间:2018-01-02 19:43:11

标签: shell

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

$ wc -l myfile.txt
30213 myfile.txt

$ wc -l < <filename>
30213

我不明白的是,<运营商在这里做了什么。有人可以解释为什么<运算符会在这种情况下从输出中删除文件名吗?

2 个答案:

答案 0 :(得分:1)

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

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

所以为了回答你的问题,operator <重定向输入文件描述符以从给定文件中读取。如果未明确指定描述符编号,则默认为标准输入(fd 0)。请参阅here for a formal referencehere for a convenient description

答案 1 :(得分:1)

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

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