我无法区分这两行代码,因为每个命令的输出都是相同的
cat volcanoes.txt
cat < volcanoes.txt
答案 0 :(得分:5)
<
读取一个文件(在右侧指定)并将其通过管道传递到左侧命令的STDIN中。
cat
接受输入并将其输出到STDOUT。
如果您为cat
提供参数,它将从那里获取输入。否则,它将从STDIN中获取。
将<
与cat
结合使用通常没有用。
答案 1 :(得分:2)
cat volcanoes.txt
传递 volcanoes.txt 作为参数,cat
将尝试在磁盘上找到并打开。
cat < volcanoes.txt
在没有参数的情况下运行cat
, 解释器 将打开{em> volcanoes.txt 为{{1 }}的标准输入。
举一个更清晰的例子,尝试对多个文件进行测试:
cat
现在您可以通过比较看到差异
echo 1 > a
echo 2 > b
vs
grep . a b
在第一个中,cat a b | grep .
和a
作为参数传递,因此b
会自行打开它们并知道每一行数据的来源,因此它会告诉您每个数据文件线来自。
grep
第二种方法,$: grep . a b
a:1
b:2
读取两个文件,并将内容作为单个匿名流放在cat
的stdin上,与您说{{ 1}}。这样,grep
仅知道数据来自stdin,而不能为您提供其他信息。
cat < volcanoes.txt
对于grep
,由于$: cat a b | grep .
1
2
的作用和功能,它在功能上是相同的,但是在机械上仍然有所不同,对于某些程序,该差异可能会严重或至少是相关的。