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。