在bash中使用“<”有什么用处

问题描述 投票:3回答:2

我不能区分这两行代码,因为每个命令的输出是相同的

cat volcanoes.txt 
cat < volcanoes.txt
bash
2个回答
5
投票

<读取文件(在右侧指定)并将其传送到左侧命令的STDIN。

cat接收输入并将其输出到STDOUT。

如果你为cat提供一个参数,它会从那里获取输入。否则,它从STDIN获取。

<cat结合使用通常并不常用。


2
投票

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 .

在第一个中,ab作为参数传递,因此grep打开它们并知道每行数据的来源,因此它告诉您每行来自哪个文件。

$: grep . a b
a:1
b:2

完成第二种方式,cat读取这两个文件并将内容放在grep的stdin上作为单个匿名流,就像你说cat < volcanoes.txt时用单个文件一样。这样,grep只知道stdin上的数据,它不能给你额外的信息。

$: cat a b | grep .
1
2

对于cat来说,它在功能上是相同的,因为cat是什么和做什么,但它仍然在机械上不同,并且对于某些程序而言,差异可能是瘫痪,或者至少是相关的。

© www.soinside.com 2019 - 2024. All rights reserved.