在终端中,输入cd ./someDir
和cd 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:
如果目录操作数的第一个组成部分是点或点点,请继续执行步骤 6。
如果路径名为非空,则从 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