查看这两个文件:
在我看来,它们完全相同,但文件 1 有 41 字节,文件 2 有 44 字节。
现在,我不会关心 3 个额外的字符,但是,我认为这些字符也会导致一个奇怪的错误:当我克隆并运行这些文件时,文件 1 运行正常,而文件 2 在第 3 行返回错误:“./ BasicCheck.sh:第 3 行:cd:case0:没有这样的文件或目录”。
那么:这些额外的字符是什么?为什么它们会导致错误?我应该怎么做才能修复这些错误?
我的猜测是它们是换行符 - 也许文件 1 具有基于 Linux 的换行符,文件 2 具有基于 Windows 的换行符。这是对的吗?为什么会导致这样的错误?
答案1
该file
命令指出了问题:
% file file*
file1: Bourne-Again shell script, ASCII text executable
file2: Bourne-Again shell script, ASCII text executable, with CRLF line terminators
第二个脚本是“DOS”格式。所以不会按预期工作。您可以将其转换为dos2unix
现在的结果是相同的
% dos2unix file2
dos2unix: converting file file2 to Unix format ...
% ls -l file1 file2
-rw-r--r-- 1 sweh sweh 41 Mar 19 11:23 file1
-rw-r--r-- 1 sweh sweh 41 Mar 19 11:25 file2
当您尝试将 DOS 格式文件与 Unix 命令一起使用时,每行末尾都会有一个尾随的 control-M。所以一行如
a=b
将真正设置a
为 b 后跟 control-M,简写^M
:
a=b^M
每个命令都会受到类似的影响;例如,带有两个字符命令的简单行将尝试运行不存在的ls
三个字符命令。ls<control-M>