Bash 脚本将 ^M 附加到文件名

Bash 脚本将 ^M 附加到文件名

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工具。

相关内容