Mat*_*hid 11 directory filenames
我正在编写一个用于操作 Unix 路径字符串的库。既然如此,我需要了解大多数人不会担心的语法的一些晦涩的角落。
例如,作为最好的,我可以告诉大家,似乎foo/bar
并foo//bar
都指向同一个地方。
此外,~
通常代表用户的主目录,但如果它出现在路径中间呢?那会发生什么?
如果我要编写正确处理每种可能情况的代码,这些以及其他几十个晦涩的问题需要回答。有人知道解释这些东西的确切语法规则的权威参考吗?
(不幸的是,搜索诸如“Unix 路径语法”之类的术语只会出现一百万页讨论$PATH
变量……哎呀,我什至在努力为这个问题找到合适的标签!)
Sté*_*las 13
有三种类型的路径:
foo
, foo/bar
, ../a
, .
。它们不以/
并相对于使用该路径进行系统调用的进程的当前目录开始。/
,/foo/bar
或///x
。它们以 1 或 3 或更多开头/
,它们不是相对的,从/
根目录开始查找。//foo
被特殊对待,但没有具体说明如何对待。某些系统将其用于特殊情况,例如网络文件。它必须正好是 2 个斜线。除了在开始时,斜线序列就像一个斜线。
~
仅对 shell 特殊,它由 shell 扩展,它对系统根本没有特殊性。它的扩展方式取决于 shell。Shell 执行其他形式的扩展,例如通配 ( *.txt
) 或变量扩展/$foo/$bar
或其他形式。就系统而言,~foo
它只是一个相对路径,如_foo
或foo
。
需要注意的事项:
foo/
不一样foo
。对于大多数系统上的大多数系统调用,它foo/.
比foo
(尤其foo
是符号链接)更接近(就像是foo//
一样foo/
)。a/b/../c
不一定与a/c
(例如 ifa/b
是符号链接)相同。最好不要..
特殊对待。a/././././b
相同的情况通常是安全的a/b
。