我想在Unix shell脚本中逐行读取文件。文件中的一行几乎可以包含任何类型和任意数量的字符。 到目前为止,我已经尝试了一个简单的阅读脚本
while read line
do
echo $line
done < datafile
但是,如果我有一个尾随空格,这个脚本输出的部分行连接在一起,甚至是重复的。所以我把它修改为:
while IFS= read -r line; do
echo $line
done < datafile
解决了这个问题,之后,它运行正常。但是当我遇到包含特殊字符的行 - 法语或德语特殊字符,中文,cyrilic等时 - 脚本最终再次连接和/或复制它们。
例如:
包含4个PDF的名称的文件(可以是任何内容 其他),因为它在控制台中用cat命令可见:
????????? ???.pdf AR_CLAIMS_BUBBLES.pdf leur_compte__-_re??u_le.pdf blomberg_RG62540.pdf
该文件的脚本输出为:
????????? ???.pdf AR_CLAIMS_BUBBLES.pdf blomberg_RG62540.pdf AR_CLAIMS_BUBBLES.pdf leur_compte__-_re??u_le.pdf blomberg_RG62540.pdf blomberg_RG62540.pdf leur_compte__-_re??u_le.pdf
我不明白这是怎么回事,为什么会这样,但它似乎高度依赖于这些特殊的角色。该脚本仅在处理具有此类字符的行时出现故障(在控制台中显示为&#39;?&#39;)。
在这种情况下,我如何准确阅读各行?
注意:遗憾的是,无法提供文件的实际内容,因为我只能通过控制台访问Unix系统。