我有一个列表,我想运行一个命令,所以我首先使用回声测试它,以确保它是正确的,但它打印错了。
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
因此它将前两个字符替换为我在变量之后放置的内容,我不明白为什么。
答案 0 :(得分:2)
你的文件有DOS换行符,所以每个输入行以一个隐藏的$'\r'
字符结束,该字符在打印该行后将光标移动到行的开头,这样下一个字符就会覆盖该行的第一个字符
使用dos2unix
或类似工具将其转换为UNIX换行符,或展开${name%$'\r'}
以修剪它们。