终端抄本说明了一切:
iMac:~$ echo -n a | md5 0cc175b9c0f1b6a831c399e269772661 iMac:~$ perl -e 'system "echo -n a | md5"' c3392e9373ccca33629d82b17699420f
请注意a
的MD5哈希是0cc175b9c0f1b6a831c399e269772661,第一个
结果。为什么在调用相同的命令时结果会有所不同
by perl?
顺便说一下,perl是 perl 5,版本12,颠覆4(v5.12.4)为darwin-thread-multi-2level 构建的。系统:Mac OS 10.8,Darwin 12.0
答案 0 :(得分:3)
在Mac上的/bin/sh
shell中,echo -n
不会像在/bin/bash
中那样打印换行符。如果你进入/bin/sh
并运行echo -n a
,你可以看到这一点,你的输出应该是这样的:
sh-3.2$ echo -n a
-n a
所以你真的得到-n a
而不是期望的a
。当perl系统运行/bin/sh
来评估您的命令时,-n a
正在传递到md5而不是您想要的a
答案 1 :(得分:2)
具体问题已经得到解答,但我想指出od有助于准确理解任何命令输出或文件包含的内容。这对于显示非打印字符非常有用。
$ echo -n a | od -tc
0000000 a
0000001
$ perl -e 'system "echo -n a | od -tc";'
0000000 - n a \n
0000005