3

终端成绩单不言自明:

iMac:~$ echo -na | md5
0cc175b9c0f1b6a831c399e269772661
iMac:~$ perl -e 'system "echo -na | md5"'
c3392e9373ccca33629d82b17699420f

注意,a第一个结果的MD5哈希是0cc175b9c0f1b6a831c399e269772661。为什么perl调用同一个命令时结果会不一样?


顺便说一句,perl 是为 darwin-thread-multi-2level 构建的 perl 5, version 12, subversion 4 (v5.12.4)。和系统:Mac OS 10.8、Darwin 12.0

4

2 回答 2

3

/bin/sh在 mac 上的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

于 2012-10-21T00:01:34.107 回答
2

具体问题已经得到解答,但我想指出 od 有助于准确理解任何命令输出或文件包含的内容。这对于显示其他非打印字符特别有用。

$ echo -n a | od -tc
0000000    a                                                            
0000001

$ perl -e 'system "echo -n a | od -tc";'
0000000    -   n       a  \n                                            
0000005
于 2012-10-21T02:25:17.073 回答