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

将文件读取为字符串时,read内置命令与cat哪个效率更高?

读取大文本文件:cat vs read 循环的效率对比

兄弟,这个问题我太有发言权了!直接给你结论:读取大文件时,方式一(cat 命令替换)的效率要比方式二(read 循环拼接)高得多,具体原因拆解如下:

  • 循环的累积开销远大于单次外部调用:虽然方式一确实会启动外部cat进程并创建子shell,但这只是一次性的开销。而方式二的read循环是逐行处理——哪怕文件有几万行,shell就得执行几万次read、变量拼接和条件判断。每一次循环的开销看起来不大,但架不住量多,累积起来的消耗远超过一次cat调用的成本。
  • 变量拼接的性能黑洞:方式二中的string="${string}${line}${newline}"操作,每次都会把旧字符串的内容完整复制一遍,再拼接新行和换行符。文件越大,这个复制的成本就越高,几乎是随着文件行数呈指数级增长。而cat是专门为文件读取优化的工具,底层用的是高效的系统调用,读取和输出的效率比shell逐行处理高好几个量级。
  • 额外逻辑的叠加损耗:方式二还要额外判断最后一行是否为空,这又是一笔额外的逻辑开销,虽然单看不多,但叠加在大量行的处理上,也会拖慢整体速度。

另外补充个小技巧:如果你的环境是bash这类现代shell,其实可以用string=$(<file)这种内置语法,它不需要调用外部cat进程,效率比方式一还要略胜一筹;但如果是严格的POSIX sh环境,cat的方式还是最优选择。

两种实现代码对比

方式一:cat 命令替换

#!/bin/sh
string="$(cat file)"

方式二:read 循环拼接

#!/bin/sh
newline=' '
string=
while IFS= read -r line; do
    string="${string}${line}${newline}"
done < file
if [ -n "$line" ]; then
    string="${string}${line}"
fi

内容的提问来源于stack exchange,提问作者Harold Fischer

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.29 07:41:50