3

端末のトランスクリプトはそれ自体を物語っています:

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

の MD5 ハッシュはa、最初の結果である 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/shMacのシェルにある場合、のecho -nように改行を出力しません/bin/bash。ドロップし/bin/shて実行するとecho -n a、これを確認できます。出力は次のようになります。

sh-3.2$ echo -n a
-n a

-n aしたがって、目的のの代わりに文字通り取得していますa/bin/shあなたのコマンドを評価するためにperlシステムが実行される-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 に答える