了解带有输入重定向的 unix Paste 命令

了解带有输入重定向的 unix Paste 命令

我试图了解当存在来自输入重定向的文件时在 unix 中粘贴命令的实现。

假设有以下文件:

A.txt:
A
B
C
D

B.txt:
1
2
3
4

UNIX命令:

paste - A.txt - < B.txt

预期输出:

1    A    2
3    B    4
     C
     D

这是否意味着每当您将文件重定向到标准输入时,两者都会-共享相同的文件-(这叫什么?)

我试图理解为什么输出与执行类似的操作不同:paste B.txt A.txt B.txt因为我认为重定向的输入只是替换了-但结果不同。

答案1

文档 ( man paste) 写道,

没有 FILE 或 FILE 时-,读取标准输入。

当您包含-为源文件时,标准输入 (标准输入) 被读取。标准输入已被 shell 打开并分配给文件描述符 0,并且从该描述符paste读取数据。该paste命令本身不会打开任何内容标准输入(它不能,因为只有-)所以从此文件描述符的所有读取都是共享的。

在您的示例中,第一行B.txtis1并且在第一个字段中使用。第二行B.txt用于2第二个字段。这一直持续到标准输入返回 EOF(文件结束)。

相关内容