这三个额外的字符是什么?为什么它们会导致如此奇怪的错误?

这三个额外的字符是什么?为什么它们会导致如此奇怪的错误?

查看这两个文件:

在我看来,它们完全相同,但文件 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>

相关内容