忙框逐行读取文件

lim*_*ala 4 shell busybox

没有随忙箱而来的读取小程序。

有没有办法使用busybox逐行读取txt文件?

我现在拥有的是

while read line
do
     echo $line
done < "$InputFile"
Run Code Online (Sandbox Code Playgroud)

Sté*_*las 13

read 是一个 shell 内置的(如果不是,它就不能设置一个 shell 变量)。

因此,如果您的 busyboxsh基于,则为ash

while IFS= read -r line <&3; do
  printf '%s\n' "$line"
done 3< "$InputFile"
Run Code Online (Sandbox Code Playgroud)

就像在任何 POSIX shell 中一样。但与任何 shell 一样,使用while read循环处理文本通常是不好的 shell 脚本实践

以上,你需要:

  • IFS= 否则前导和尾随未转义空格和制表符将从行中剥离
  • -r, 否则反斜杠将被视为转义字符并删除(除非已转义)
  • printf, 不是echo这不适用于例如-nene
  • "$line"引用 (not $line) 否则行的内容在空格和制表符上拆分,并扩展通配符模式。
  • <&3并且3< ...,如果您需要访问循环中的原始标准输入。

如果文件在最后一行之后包含字符并且您想显示它们,则可以在循环后添加:

[ -z "$line" ] || printf %s "$line"
Run Code Online (Sandbox Code Playgroud)

请注意,该循环无法处理二进制数据(NUL字符)。

  • @jordanm,我编辑了答案以说明增加复杂性的原因。 (2认同)