我正在读这个question,其中有人试图从shell中获取文件中的行数。从评论中,我看到并实现了以下内容:
$ wc -l myfile.txt
30213 myfile.txt
$ wc -l < <filename>
30213
我不明白的是,<
运营商在这里做了什么。有人可以解释为什么<
运算符会在这种情况下从输出中删除文件名吗?
答案 0 :(得分:1)
在第一种情况下,filename
在调用wc
时作为参数提供,这会导致wc
将其包含在输出中。
在第二种情况下,stdin从filename
重定向,这使wc
“不知道”该文件,因此无法打印其名称。这相当于调用cat filename | wc -l
。
所以为了回答你的问题,operator <
重定向输入文件描述符以从给定文件中读取。如果未明确指定描述符编号,则默认为标准输入(fd 0)。请参阅here for a formal reference和here for a convenient description。
答案 1 :(得分:1)
wc
在从文件中读取时输出文件名作为输出的一部分。
<
按照&#34;箭头&#34;的方向重定向文件/程序之间的输入和输出。有关I / O重定向的更多信息,this是一个非常方便的链接。文件名被&#34;切断的原因&#34;是因为wc
在技术上不再从文件中读取。