外部命令输出不一致

时间:2012-10-20 23:41:26

标签: perl md5

终端抄本说明了一切:

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

2 个答案:

答案 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