Perl 外部命令输出不一致

Perl 外部命令输出不一致,perl,md5,Perl,Md5,终端转录本不言自明: iMac:~$ echo -n a | md5 0cc175b9c0f1b6a831c399e269772661 iMac:~$ perl -e 'system "echo -n a | md5"' c3392e9373ccca33629d82b17699420f iMac:~$echo-n a | md5 0cc175b9c0f1b6a831c399e269772661 iMac:~$perl-e'系统“echo-na | md5” c3392e9373ccca33629

终端转录本不言自明:

iMac:~$ echo -n a | md5 0cc175b9c0f1b6a831c399e269772661 iMac:~$ perl -e 'system "echo -n a | md5"' c3392e9373ccca33629d82b17699420f iMac:~$echo-n a | md5 0cc175b9c0f1b6a831c399e269772661 iMac:~$perl-e'系统“echo-na | md5” c3392e9373ccca33629d82b17699420f 请注意,
a
的MD5散列是0cc175b9c0f1b6a831c399e269772661,第一个 结果。为什么调用同一个命令时结果会不同 通过perl



顺便说一句,perl是为darwin-thread-multi-2level构建的Perl5,版本12,Subversion4(v5.12.4)。系统:Mac OS 10.8,Darwin 12.0

在Mac上的
/bin/sh
外壳中,
echo-n
不会像
/bin/bash
那样打印换行符。如果您进入
/bin/sh
并运行
echo-na
,您可以看到这一点,您的输出应该如下所示:

sh-3.2$ echo -n a
-n a

因此,您实际上得到的是
-na
,而不是所需的
a
。当perl系统运行
/bin/sh
来评估您的命令时,
-na
被传递到md5中,而不是您想要的
a

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

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

$ perl -e 'system "echo -n a | od -tc";'
0000000    -   n       a  \n                                            
0000005

奇怪的是,在linux和freebsd上都返回
0cc175b9c0f1b6a831c399e269772661
对于meOh-man来说,这真的很奇怪,而且更复杂。可能是一个bug?很奇怪,我刚刚确认我也在mac上得到了你的结果