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

Shell脚本使用while循环逐行读取文件时字符n丢失问题

问题根因及解决方案

根因说明

  • 当前执行脚本的shell不支持$'...'格式的ANSI-C转义语法,你写的IFS=$'\n'没有将IFS(内部字段分隔符)设置为仅换行符,反而将$、\、n三个字符都加入了IFS的分隔字符列表。
  • echo $line没有给变量加双引号,触发了shell的默认字段分割逻辑,会把变量值中所有属于IFS的字符替换为空格,这就是所有n字符都变成空格的直接原因。

解决方案

方案1:使用bash执行脚本(推荐)

如果你不需要兼容POSIX标准的sh,直接指定用bash运行即可:

  1. 在脚本开头添加shebang声明:#!/bin/bash
  2. 执行脚本时使用bash 你的脚本名.sh,不要用sh 你的脚本名.sh
  3. 给变量引用加上双引号,修改后的循环代码如下:
while IFS=$'\n' read -r line; do echo "$line"; done < namespaces.txt

方案2:兼容POSIX sh的写法

如果需要适配所有POSIX兼容的shell,替换IFS的设置方式,同时给变量加双引号:

# 直接将换行符写入IFS,不需要转义语法
IFS='
'
while read -r line; do echo "$line"; done < namespaces.txt

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 08:54:04