【问题标题】:What is the use of "< " in bashbash中的“<”有什么用
【发布时间】:2019-04-14 10:35:18
【问题描述】:

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

cat volcanoes.txt 
cat < volcanoes.txt

【问题讨论】:

标签: bash


【解决方案1】:

&lt; 读取文件(在右侧指定)并将其通过管道传输到左侧命令的 STDIN。

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

如果您向cat 提供参数,它会从那里获取输入。否则,它将从 STDIN 获取。

&lt;cat 结合使用通常没有用处。

【讨论】:

  • 控制 cat 的标准输入很有用。 foo | cat prefix.txt - 发出prefix.txt 后跟foo 的输出——这个用例实际上符合cats 的描述和连接 多个输入的生命使命。如果您对 cat 只有 一个 参数(“一个参数”的措辞暗示是典型的/通常的),那么您通常根本没有充分的理由使用 cat。
【解决方案2】:

cat volcanoes.txtvolcanoes.txt 作为参数传递,cat 将尝试在磁盘上定位并打开。

cat &lt; volcanoes.txt 运行不带参数的 catinterpreter 打开 volcanoes.txt 作为cat 的标准输入。

为了更清楚的例子,尝试使用多个文件进行测试:

echo 1 > a
echo 2 > b

现在您可以通过比较看到差异

grep . a b

cat a b | grep .

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

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

完成第二种方式,cat 读取两个文件并将内容作为单个匿名流放在grep 的标准输入上,这与您说cat &lt; volcanoes.txt 时对单个文件所做的非常相似。这样,grep 只知道标准输入上有数据,它不能给你额外的信息。

$: cat a b | grep .
1
2

对于cat,它在功能上是相同的,因为cat 是什么和做什么,但它在机制上仍然不同,对于某些程序来说,这种差异可能是严重的,或者至少是相关的。

【讨论】:

    猜你喜欢
    • 2018-01-24
    • 2011-10-24
    • 2014-09-07
    • 2016-09-10
    • 1970-01-01
    • 1970-01-01
    • 2012-08-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多