echo
在我的一个 bash 脚本中,我通过反复使用输出重定向来附加到文件来创建文件。但是,生成的文件命名不正确,但始终^M
在末尾附加一个不可打印的字符。有人知道我做错了什么吗?以下简单脚本演示了这个问题:
#!/bin/bash
# Should create 'concat.txt' instead creates 'concat.txt^M'
outfile="concat.txt"
echo "'"$outfile"'"
for item in "Able" "Baker" "Charlie"; do
echo $item >> $outfile
done
系统:Ubuntu 9.04(x64)
答案1
我怀疑您在某处编辑了文件,添加了 DOS 样式的行尾。运行文件dos2unix
以删除它们。
dos2unix yourscriptfile
答案2
^M
如果您将行尾设置为 unix 模式,则在文件最初以 dos 模式写入时,您将在每一行末尾看到行尾\r\n
所以,当你看到
echo $item >> $outfile
unix 看到:
echo $item >> $outfile^M
第一的,
:set ff=unix
然后:
:%s/\r//
删除 ^M
编辑
出于某些愚蠢的原因,我以为你正在使用 vim。可能是因为它是我见过的唯一一个显示为 的编辑器\r
。^M
无论如何,按照 Dennis Williamson 所说的去做,使用该dos2unix
工具。