我有一个要在其上运行命令的列表,因此我首先用回显对其进行了测试,以确保它是正确的,但打印出的错误。

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


因此它将前两个字符替换为我在变量后添加的内容,但我不知道为什么。

最佳答案

您的文件具有DOS换行符,因此每行输入都以一个隐藏的$'\r'字符结尾,该字符在打印该行之后将光标移至该行的开头,从而使写入的下一个字符覆盖该行的第一个字符。

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

关于linux - bash 替换字符串,我不希望它,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/35633055/

10-11 22:49
查看更多