节点中是否有类似" path.resolve"的API? 还是有什么可以做的?

例如(nodejs代码):
path.resolve("~/sample.sh")
应该得到:/home/currentuser/sample.sh

  • 从技术上讲,它不是绝对的波浪号扩展。 ~sample.sh是绝对路径(它所指的内容不会基于CWD更改)。 代字号只是用户(绝对)主目录路径的快捷方式。
  • 扩展波浪号到主目录的可能副本

解决~(表示用户主目录)是另一回事,通常是由Shell来解决此问题。 有关详细信息,请参见将波浪号扩展到主目录。

如果要通过Go代码执行此操作,则可以使用user.Current()函数获取有关当前用户的详细信息,包括其主文件夹(将为User.HomeDir)。 但是,您仍然必须自己替换它。

原始答案如下。

您可以使用path.Join()filepath.Join()

例如:

1
2
base :="/home/bob"
fmt.Println(path.Join(base,"work/go","src/github.com"))

输出:

1
/home/bob/work/go/src/github.com

您可以使用path.Clean()filepath.Clean()从路径中"删除"点.和双点..

您可以使用filepath.Abs()解析相对路径并获得绝对路径(如果不是绝对路径,则在工作目录之前)。 filepath.Abs()也会在结果上调用Clean()

例如:

1
fmt.Println(filepath.Abs("/home/bob/../alice"))

输出:

1
/home/alice <nil>

在Go Playground上尝试示例。

参见相关问题:从相对路径解析绝对路径

  • 这似乎是一条红色的鲱鱼-Join与提出的问题没有任何关系,Clean也没有。 直到最后三段或问题得到解决。
  • @Adrian问题的第一个版本没有提到解析~,只是解析路径。 但是,是的,它们不再相关。
  • 嗯,很公平,没有看到它已被编辑。
  • @Adrian编辑了答案,使其很明显。