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

亚历克斯·威廉姆斯

在终端中,输入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我的理解.是对当前目录的引用。

卡米尔库克

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

嗯,不是在我的账户上。但是,是的。

在什么情况下你会使用一种而不是另一种

我会使用任何。

,或者这两个命令完全等效?

不。

是否有文档涵盖此内容?

POSIX cd

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

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

  3. ...

所以:

$ 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

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章