題 Bash腳本將^ M附加到文件名


在我的一個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

系統:Ubuntu 9.04(x64)


4
2017-09-10 23:07


起源




答案:


我懷疑你編輯了一個添加了DOS風格的行結尾的文件。運行您的文件 dos2unix 擺脫他們。

dos2unix yourscriptfile

12
2017-09-10 23:28



要檢查Windows行結尾,請運行 cat -vt file.ext 並尋找 ^M的。 - ken


^M 如果您在最初以dos模式寫入文件時將行結束設置為unix模式,那麼您將在每行末尾看到的內容,其中行結尾為 \r\n

所以,你看到了

echo $item >> $outfile

unix看到:

echo $item >> $outfile^M

第一,

:set ff=unix

然後:

:%s/\r//

刪除^ M

編輯

出於某種愚蠢的原因,我認為你正在使用vim。也許是因為它是我見過的唯一一個編輯器 \r 如 ^M。無論如何,做丹尼斯威廉姆森所說的,使用 dos2unix 工具。


4
2017-09-10 23:26



那是 vi? - Dennis Williamson
哦對不起,由於一些愚蠢的原因我認為他正在使用vi - hasen