Perl 外部命令输出不一致
终端转录本不言自明: 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 请注意,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
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上得到了你的结果