情况描述:
打算在mac终端执行一段命令,
之前这个命令都可以顺利执行,这次从自己的飞书笔记上复制下来后再执行,结果报错 command not found
(ps:命令的含义是禁止Chrome浏览器左滑回到上次页面,不过这不重要)
命令执行失败了,报错 command not found
看起来一模一样的命令,之前却成功执行了:
那肯定是肉眼不好区分的地方产生了差异。所以将两段看起来一模一样的命令放到纯文本文档中,使用 od 命令 查看文件内容的 ASCII 码,看看有什么不同。
文件内容:
将文件用 ASCII 码形式打开(od -c):
不难发现,是前后两段空格 的 ASCII 码内容不一样。可以成功运行命令的空格是『 』,报错命令的空格是『 **』。它看起来像一个特殊符号的空格,在ASCII码表上并找不到这玩意儿,而且翻译成『 **』也极有可能和操作系统自身的规定相关。
所以让我们删掉其他内容,仅保留这个奇怪的空格,再用16进制打开,看看能不能通过16进制码反查找到它的真面目:
用16进制打开文件(od -h):
苹果这玩意儿因为不知名的原因会把一组内的十六进制码反着放,也就说这个空格的16进制码是 c2a0
万能的 CSDN 搜一搜 c2a0 是什么的十六进制码,肯定有前人踩过坑,得到如下结论:
c2a0 是 UTF-8 编码中的 半角非中断空格 (编码表见附录二)
这是一个叫做 Non-breaking space 的东西,即咱们前端熟悉的的 ; 
到这里终于破案了,这个空格就是 。所以是飞书文档不知道什么奇奇怪怪的原因,把我所有空格替换成了  ,导致下次复制命令代码执行的时候发生车祸。
附一:od 命令的语法:
Linux指令:od
示例用法:od -c filepath
od命令
用户通常使用od命令查看特殊格式的文件内容。通过指定该命令的不同选项可以以十进制、八进制、十六进制和ASCII码来显示文件。
语法:od [选项] 文件路径…
命令中各选项的含义:
- A 指定地址基数,包括:
d 十进制
o 八进制(系统默认值)
x 十六进制
n 不打印位移值
- t 指定数据的显示格式,主要的参数有:
c ASCII字符或反斜杠序列
d 有符号十进制数
f 浮点数
o 八进制(系统默认值为02)
u 无符号十进制数
x 十六进制数
除了选项c以外的其他选项后面都可以跟一个十进制数n,指定每个显示值所包含的字节数。
说明:od命令系统默认的显示方式是八进制,这也是该命令的名称由来(Octal Dump)
附二:UTF-8 十六进制转码表
https://www.utf8-chartable.de/unicode-utf8-table.pl?utf8=dec