← 全部文章

技术与生活 / 一篇记录

逐行读文件时,别吃掉反斜杠和空格

反斜杠可能被 read 解释,使用 -r 可以避免它作为转义符被消费。

文本行常常包含路径、正则表达式或缩进,读取时不应未经约定就把它们重新解释。清空 IFS 与启用 read -r,分别处理首尾分隔字符和反斜杠的问题。

操作与观察

以下示例使用 Bash,请在独立测试目录中理解输入、输出和退出码。

printf '%s\n' 'a\b' | while IFS= read -r line; do printf '%s\n' "$line"; done

检查反斜杠和前后空格是否保留。

准备一行带前导空格、一行带反斜杠的样本,比较处理前后。还要单独考虑文件最后一行没有换行的情况,简单循环可能遗漏它。

需要保留末尾无换行的最后一行时,循环条件可以同时检查 read 是否成功以及变量是否仍有内容。加入这一边界之前,应先确认空行与结束标记在输入协议中的实际含义。

别遗漏这条边界

管道中的循环可能运行在子 Shell 中,不适合依赖外部变量更新。

参考:Shell 文档。

搜索文章

输入关键词,找回一篇记录。