我试图了解当存在来自输入重定向的文件时在 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.txt
is1
并且在第一个字段中使用。第二行B.txt
用于2
第二个字段。这一直持续到标准输入返回 EOF(文件结束)。