You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为何使用标准输入时paste命令的输出结果不同?

关于paste命令输入为多个-时的行为解释

手册说明

paste 将每个输入文件中依次对应的行合并,以制表符分隔后写入标准输出。当文件名指定为‘-’或未给出输入文件时,使用标准输入。

问题场景

当不使用标准输入时,paste的行为符合预期:比如执行paste file1 file2,输出的第n行由file1的第n行、制表符、file2的第n行组成。

但如果将输入替换为两个表示标准输入的-,执行paste - - < foo.txt时,输出的每行却是标准输入的连续两行以制表符分隔,而非同一行重复两次,这一行为需要解释。

示例验证

假设有文件foo.txt,内容如下:

1
2
3
4
  • 执行paste foo.txt foo.txt,输出为:
1    1
2    2
3    3
4    4
  • 执行paste - - < foo.txt,输出为:
1    2
3    4

原因解释

你的猜想完全正确,核心差异在于文件描述符的数量:

  • paste foo.txt foo.txt会打开foo.txt的两个独立文件描述符,每个描述符都有自己独立的文件指针(即你所说的“光标”)。每次合并行时,两个指针分别读取各自指向的第n行,读取完成后同时后移,最终得到对应行合并的结果。
  • paste - - < foo.txt中,两个-指向的是同一个标准输入流(这里由foo.txt重定向而来)。标准输入是单一的数据流,只有一个文件指针。paste处理第一个-时读取一行,指针后移;处理第二个-时,只能从当前指针位置继续读取下一行,指针再次后移。循环此过程,就将连续的两行合并成了输出的一行,从而产生了你看到的结果。

内容的提问来源于stack exchange,提问作者Mehdi Charife

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.30 20:06:28