AppleScript和MD5

JJW*_*Web 2 shell applescript command md5

我只是尝试使用AppleScript计算字符串的MD5:

set hash_string to do shell script "echo -n hi | md5"
Run Code Online (Sandbox Code Playgroud)

在上面的代码中,我实际上用"hi"替换了传递给shell的字符串作为测试.AppleScript报告:

tell current application
    do shell script "echo -n hi | md5"
        --> "5ea3a74c5a5c60abd09da8c5f85fa0a5"
end tell
Run Code Online (Sandbox Code Playgroud)

直接在终端中运行相同的命令会导致:

% echo -n hi | md5
49f68a5c8493ec2c0bf489821c21fc3b
Run Code Online (Sandbox Code Playgroud)

虽然命令是相同的,但计算的散列是不同的.显然,在AppleScript中传递了其他字符,但我似乎无法弄清楚它们是什么.我感谢任何指导.

Ned*_*ily 5

如果你删除了,你可以看到发生了什么| md5.在AppleScript案例中,您将看到-n hi输出.这是因为sh echo调用的POSIX do shell script不支持,-nbash或者csh echo内置函数或/bin/echo命令都支持-n.

$ bash
$ echo -n hi
hi$ sh
$ echo -n hi
-n hi
Run Code Online (Sandbox Code Playgroud)

有关详细信息,请参阅Mac OS X echo手册页POSIX文档echo.注意,POSIX标准的要求是一致的实现echo必须支持任何选项,其中包括-n; 为了在shell和系统之间实现兼容性,POSIX编辑建议使用printf诸如抑制换行之类的操作.

tell current application
    do shell script "printf '%s' hi | md5"
end tell
--> "49f68a5c8493ec2c0bf489821c21fc3b"
Run Code Online (Sandbox Code Playgroud)