在 Bash 中,cd ./someDir 和 cd someDir 之间有什么实际区别吗?

  • 本文关键字:someDir cd 区别 之间 Bash bash cd
  • 更新时间 :
  • 英文 :


在终端中,输入cd ./someDircd someDir会得到相同的结果,即从当前目录更改为someDir子目录。

在哪些情况下,您会使用一个命令而不是另一个命令,或者这两个命令是否完全相同?

man cd并没有对这个问题有太多的了解,我在网上不容易找到文档。是否有文档在某处涵盖此内容?

我在VSCode上的MacOS Catalina中运行一个标准shell,$SHELL --version报告GNU bash, version 3.2.57(1)-release (x86_64-apple-darwin19)

这是我的第一个问题,我愿意接受有关如何改进它的任何反馈。谢谢。

编辑:这与我遇到的特定用例无关,我只是想知道命令之间是否有任何实际差异。

它出现在最近的一个 PR 中,我看到了使用的cd ./,我问他们使用了它而不是单独cd。他们理解前者"确保它被限制在当前目录中",但无法进一步解释。

从表面上看,这两个命令是相同的,但在 Bash 中,细微的差异会导致不同的行为,我想知道这里是否是这种情况。通常我会单独使用cd。我知道.是对当前目录的引用。

如果设置了$CDPATH则这两个命令的行为不同。

cd ./dir

更改为./dir,仅此而已,但是

cd dir

如果some/path$CDPATH中,可能会更改为some/path/dir

cd ./someDir 和 cd someDir 之间有什么实际区别吗?

好吧,不在我的账户上。但是是的。

在哪种情况下,您会使用一个而不是另一个

我会使用任何。

,还是两个命令完全等效?

不。

是否有文档在某处涵盖此内容?

来自POSIX cd:

  1. 如果目录操作数的第一个组成部分是点或点点,请继续执行步骤 6。

  2. 如果路径名为非空,则从 CDPATH 的分隔路径名中的第一个路径名开始(请参阅环境变量部分),测试该路径名的串联,如果该路径名未以字符结尾,则测试字符,以及目录操作数命名目录。如果路径名为 null,则测试点、字符和操作数的串联是否命名目录。在任一情况下,如果生成的字符串命名现有目录,请将 curpath 设置为该字符串并继续执行步骤 7。否则,请使用 CDPATH 中的下一个路径名重复此步骤,直到测试完所有路径名。

所以:

$ mkdir -v -p a tmp/a
mkdir: created directory 'a'
mkdir: created directory 'tmp'
mkdir: created directory 'tmp/a'
$ CDPATH=$PWD/tmp

然后:

$ cd a
/some/path/tmp/a

但:

$ cd ./a
$ pwd
/some/path/a

相关内容

  • 没有找到相关文章

最新更新