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