Windows 和 \r\n (CRLF) 和 \n (LF) 的 Unix 之间的可移植性错误?

Portability Bug between Windows and Unix of \r\n (CRLF) and \n (LF)?

当我在 windows 平台

中为 Shell 脚本编写代码时
#!/bin/bash
a=20
b=10
sum=`expr $a + $b`
echo $sum

但尝试在 UNIX 平台上执行它时出现错误 '20\r': command not found,因为 Windows 文件以 /r/n 结尾,而 UNIX 文件以 /n 结尾。

知道如何消除和处理此类错误吗?

使用 dos2unix - “[a] 将 DOS/MAC 格式的纯文本文件转换为 UNIX 格式的程序” - 或类似的命令。

像 Git 或 Hg 这样的储存库他们有 support for 'line ending normalization'。由于其他原因,使用版本控制系统也很棒!

如果通过 [S]FTP/SCP 传输(例如 WinSCP)为传输指定 "TEXT mode" 转换将自动完成 - 换行符转码作为copy/transfer 进程本身。

许多 "advanced" 文本编辑器(例如 [x]emacs、[g]vim、sublime、notepad++,甚至 Visual Studio)也可以 repair/normalize 这样的文件。这些编辑器也可以用来从头开始写文件:)