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

Jos*_*ant 5 bash

在我的一个 bash 脚本中,我通过重复使用echo输出重定向来附加到文件来创建文件。然而,生成的文件没有正确命名,但总是^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
Run Code Online (Sandbox Code Playgroud)

系统:Ubuntu 9.04 (x64)

Den*_*son 13

我怀疑您在某处编辑了添加 DOS 样式行结尾的文件。运行您的文件dos2unix以摆脱它们。

dos2unix yourscriptfile
Run Code Online (Sandbox Code Playgroud)


has*_*sen 5

^M 如果在文件最初以 dos 模式写入时将行结尾设置为 unix 模式,其中行结尾是 \r\n

所以,当你看到

echo $item >> $outfile
Run Code Online (Sandbox Code Playgroud)

Unix 看到:

echo $item >> $outfile^M
Run Code Online (Sandbox Code Playgroud)

第一的,

:set ff=unix
Run Code Online (Sandbox Code Playgroud)

然后:

:%s/\r//
Run Code Online (Sandbox Code Playgroud)

删除^M

编辑

出于某种愚蠢的原因,我假设您正在使用 vim。也许是因为它是我见过的唯一一个显示\ras 的编辑器^M。无论如何,按照丹尼斯威廉姆森所说的去做,使用该dos2unix工具。