我刚刚偶然发现了一个有趣的错误......仍在试图弄清楚到底发生了什么。也许你可以帮忙。
首先,语境。我目前正在构建另一个人到 html 转换器(出于某些原因,我不会在这里激励,但我需要它)。
因此,请查看下面的屏幕截图(请参阅链接),更准确地说是在概述的位置。看?在上壳上,我有 < ; 和>,即转义的html。在下面的外壳上,我有 < 和 > 直接。
但是正如你所看到的(或者我真的需要镜子吗?),man 2 semget | webmanner
两边的命令是一样的,就像which webmanner
. 两者大致同时执行,中间没有对脚本进行任何修改。
[哎呀,还不能发图……链接来了]
http://aspyct.org/media/webmanner-bug.png
但是下面的外壳比较旧(大约 1 小时前打开)。较新的 shell 都打印出 < ;。所以我的第一个猜测是它以某种方式缓存了对文件的旧 inode 或旧块或其他内容的引用。
所以我在开始和结束时修改了部分脚本,以打印不同的消息。而且,令人惊讶的是,消息显示在两个终端上。但是, < ; 之间的差异仍然相同 和 <。
我很困惑......如何解释这种行为?我正在使用 OSX 10.8 (Mountain Lion)
编辑:好的,有一个很大的区别:下面的外壳使用 ruby 1.9.3,而上面的是 1.8.7。两个版本之间的字符串处理是否有任何已知差异?