【发布时间】:2021-12-21 00:33:18
【问题描述】:
在 shell 脚本中,我尝试使用 while 循环逐行读取文件,但字符 'n' 在所有行中都替换为空格。
这里是 cat namespaces.tx 的输出
cat namespaces.txt
default
kube-node-lease
kube-public
kube-system
name
mane
mann
这是从 while 循环读取时打印的输出
while IFS=$'\n' read -r line; do echo $line; done < namespaces.txt
default
kube- ode-lease
kube-public
kube-system
ame
ma e
ma
【问题讨论】:
-
请将
echo "$SHELL"和file namespaces.txt的输出添加到您的问题中(无评论)。 -
您可以使用 hexdump(1) 或十六进制编辑器来查看原始文件真正包含的内容。看起来很可疑……
-
我的猜测是脚本在 bash 以外的 shell 下运行,并且
IFS在脚本的其他地方也被设置为$'\n'。脚本是否有 shebang,你是如何运行它的?脚本中是否还有其他涉及IFS的内容?此外,至少对于read而言,将IFS设置为换行符没有多大意义,因为read将换行符视为行终止符,因此它永远不会出现在一行中。 -
刚才看到了:
IFS=$...很奇怪(而且可能是错误的)! -
@Cyrus here is out of echo "$SHELL" echo "$SHELL" /bin/bash file namespaces.txt namespaces.txt: ASCII text