HFS路径和别名路径有什么区别?


2

这是在另一个问题/答案的评论中提出的,我很好奇HFS路径和别名路径之间的区别是什么。我的理解他们是一样的。

Answers:


4

我相信在当前对OP的理解中存在一些混淆,并且得到了加强 答案 由...给出 OA- ,提供了一个 意见 ,但不是所提供的任何链接支持的(答案已被删除)。

很明显,我们都理解广义上的HFS路径是什么,即使用冒号分隔符分隔其文件夹的路径,例如 Macintosh HD:Users:CK:Desktop:。类似地,我们都知道有另一种格式,称为posix路径,它使用斜杠作为目录分隔符,例如 /Users/CK/Desktop/

然而,我所看到的困惑在于使用该术语 alias (在AppleScript上下文中),以及它如何与HFS路径相关或不相关。


AppleScript中的对象说明符

AppleScript使用 对象说明符 区分不同的对象类型。例如, folder 对象说明符告诉 发现者 "Macintosh HD:Users:CK:Desktop:" 表示文件系统上的文件夹对象,而不仅仅是一个没有上下文的字符串:

tell application "Finder" to reveal the folder "Macintosh HD:Users:CK:Desktop:"

tell application "Finder" to reveal "Macintosh HD:Users:CK:Desktop:"

前者说明了使用 folder 对象说明符正确地形成对AppleScript对象的引用,而后者要求 发现者 拿一个字符串对象和 reveal 它(当然,它会抛出错误,因为命令没有意义)。

一个 alias 是一种对象说明符就像 folder,它用于构造一个AppleScript对象,它引用文件系统上的文件或文件夹,方法是为它提供一个名称说明符,该名称说明符计算文件系统上项目的路径:

“您可以通过提供名称说明符来创建别名对象和文件对象,其中名称是文件系统中项目的路径。”
AppleScript语言指南 - 指定路径

“别名路径”

请注意,术语“别名路径”并未在AppleScript上下文中正式存在,并且它是出于方便而产生的,但实际上是指 alias 对象而不是路径。

什么 true是作为名称说明符提供的路径 alias 宾语 必须 是一个HFS路径,因此,AppleScripters经常将“别名路径”称为“别名路径” alias 对象的名称说明符。这是一个通俗的术语,只在一个方向上工作,这是指在包裹在一个内部时引用HFS路径 alias 构造。确实如此 但是,推断一下 任何 HFS路径也必须是所谓的“别名路径”,没有附带的话就没有意义 alias 说明符,完全相同,没有任何意义 发现者 没有 folder 符。

路径

在一般计算环境中,a 路径 由维基百科定义为:

“一个 路径 ,文件或目录名称的一般形式,指定文件系统中的唯一位置。路径通过遵循表达的目录树层次结构指向文件系统位置 一串字符 其中由分隔符分隔的路径组件代表每个目录。“
维基百科 - 路径(计算)

路径的计算机科学定义通常稍微概括一下,将路径指定为任何序列或符号和名称列表,告诉操作系统如何定位路径所引导的文件。 参考: 1 2 3

在任何一种情况下,正如维基百科所说,路径的性质几乎总是表示为一串字符。

简单地说,一个 路径 是一个字符串,在AppleScript上下文中,这是 总是 案子。

不仅仅是语义学

对于一个随意的读者来说,这一切都可以被视为单纯的语义,直到情况出现,例如最初刺激OP发布这个问题的那个。引用另一个问题的答案 这里

path to desktop folder

将返回HFS路径

当然,它没有,因为它返回一个 alias 对象,而不是路径。

然而,这:

(path to desktop folder) as text

返回路径,因为 alias 对象被强迫 text,它返回的路径类型是HFS路径。

因此,虽然 alias 第一个示例返回的对象 有时被称为“别名路径”,考虑到其性质 alias 宾语; 推断第二个例子也必须是“别名路径”是不正确的 ,因为它现在缺乏 alias 对象说明符。

alias 对象

简单来说,AppleScript alias 对象是:

“别名对象动态指向文件系统中的现有项。”
Mac自动化脚本指南 - 引用文件和文件夹 - 别名对象

而且,值得注意的是:

“别名对象显示为冒号分隔的路径,前面是别名说明符。”
Mac自动化脚本指南 - 引用文件和文件夹 - 别名对象

它明确定义了构成一个的两个组件 alias 对象的定义,是冒号分隔(HFS)路径(即名称说明符,它是一个字符串),与 alias 对象说明符。

这样做是构造一个AppleScript对象,它不仅仅是一个简单的路径,而且还可以作为一个构造来容纳它引用的文件系统项的许多不同属性,其中一个当然包括项目的路径。

这两个属性都可以枚举 发现者 系统事件 像这样:

tell application "System Events" to get the properties of (path to desktop folder)

而且,在 系统事件 ,我们可以看到 alias object有两个note属性,一个是 path property,以文本格式返回HFS路径;而另一个是 POSIX path property,以文本格式返回posix路径。


结论(或TL; DR)

  • “别名路径”是一种白话,在AppleScript上下文中,可以引用文件系统项的路径, alias 对象引用,但也可以参考 alias 对象本身。因此,尽管名称暗示,“别名路径”本身并不一定是路径;

  • 一个 路径 是一个字符串,包含通过目录结构到文件系统上的文件项的指示;

  • 一个 alias 对象本身就是 一个路径,但确实包含路径信息,它以HFS格式存储和显示它;

  • 实际上,“别名路径”将是HFS路径(或包含路径信息);然而,HFS路径是 一个“别名路径”。

  • 最好避免使用令人困惑/冲突的术语,特别是在Stack Overflow的答案中,这些答案将由AppleScript的新手或一般脚本阅读。 “别名路径”就是其中之一,因为它不是官方认可的AppleScript术语,并且显然已经证明会引起混淆。因此,请将“别名对象”和“路径”称为不同的实体,后者可以是字符串格式的“HFS路径”或“posix路径”,它们与 对象说明符 创建AppleScript文件引用对象。


1
优秀的答案,+ 1,绝对应该标记为接受的答案! FWIW我在前面的段落中加粗了“ alias 对象“或至少设置为粗体”以推断第二个例子也必须是“别名路径”是不正确的。“BTW ...”正斜杠“?不,一般来说,单一地,正确的术语是 削减 ,还有 反斜线 削减 ,但没有“正斜线”字符。那么一个 POSIX路径 使用 削减 用于分隔分层目录结构的字符,而不是“正斜杠”。
user3439894

1
谢谢你非常明确的答案! @ʀ2ᴅ2,请将此标记为正确答案。
oa-
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.