在我的一个 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)
^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。也许是因为它是我见过的唯一一个显示\r
as 的编辑器^M
。无论如何,按照丹尼斯威廉姆森所说的去做,使用该dos2unix
工具。
归档时间: |
|
查看次数: |
7320 次 |
最近记录: |