我不能区分这两行代码,因为每个命令的输出是相同的
cat volcanoes.txt
cat < volcanoes.txt
<
读取文件(在右侧指定)并将其传送到左侧命令的STDIN。
cat
接收输入并将其输出到STDOUT。
如果你为cat
提供一个参数,它会从那里获取输入。否则,它从STDIN获取。
将<
与cat
结合使用通常并不常用。
cat volcanoes.txt
将volcanoes.txt作为参数传递,cat
将尝试在磁盘上找到并打开。
cat < volcanoes.txt
运行没有参数的cat
,解释器打开volcanoes.txt作为cat
的stdin。
有关更清晰的示例,请尝试使用多个文件进行测试:
echo 1 > a
echo 2 > b
现在你可以通过比较看出差异
grep . a b
VS
cat a b | grep .
在第一个中,a
和b
作为参数传递,因此grep
打开它们并知道每行数据的来源,因此它告诉您每行来自哪个文件。
$: grep . a b
a:1
b:2
完成第二种方式,cat
读取这两个文件并将内容放在grep
的stdin上作为单个匿名流,就像你说cat < volcanoes.txt
时用单个文件一样。这样,grep
只知道stdin上的数据,它不能给你额外的信息。
$: cat a b | grep .
1
2
对于cat
来说,它在功能上是相同的,因为cat
是什么和做什么,但它仍然在机械上不同,并且对于某些程序而言,差异可能是瘫痪,或者至少是相关的。