Bash替换字符串我不想要它

时间:2016-02-25 16:33:43

标签: linux bash

我有一个列表,我想运行一个命令,所以我首先使用回声测试它,以确保它是正确的,但它打印错了。

while read name; do echo $name; done < RandomNames

这打印出这个列表的确切方式,但是如果我在变量之后放了任何东西,它就会取代它的开头。

所以,如果我写

while read name; do echo $name; done < RandomNames

会打印

Rich
Chris 
Zack

但如果我写

while read name; do echo $name t; done < RandomNames

写道

 tch
 tris
 tck

因此它将前两个字符替换为我在变量之后放置的内容,我不明白为什么。

1 个答案:

答案 0 :(得分:2)

你的文件有DOS换行符,所以每个输入行以一个隐藏的$'\r'字符结束,该字符在打印该行后将光标移动到行的开头,这样下一个字符就会覆盖该行的第一个字符

使用dos2unix或类似工具将其转换为UNIX换行符,或展开${name%$'\r'}以修剪它们。