带有空字符串参数的 cd 的行为

带有空字符串参数的 cd 的行为

我有一个小命令,可以进入 git 存储库的根目录:

cg() {
  cd "$(git rev-parse --show-toplevel)"
}

当不在 git 存储库中时,它会执行cd "",我认为,它不应该执行任何操作。

但是现在设置后,$CDPATH这种行为似乎已经改变。而是cd ""带我到$CDPATH

我的问题:这是一个小错误还是记录的/预期的行为?

答案1

cd这可能是和的行为方式的意外后果CDPATH(并实现),加上目录路径上允许出现尾随“/”字符(例如/tmp/(大部分)等同于/tmp)。

根据cd该命令的 POSIX 标准

从 <冒号> 分隔的路径名中的第一个路径名开始 CDPATH(请参阅环境变量部分),如果路径名非空,则测试该路径名的连接是否为 <斜杠> 字符(如果该路径名不是以 <斜杠> 字符结尾),并且目录操作数命名一个目录。

请注意,“如果路径名非空”是指的内容CDPATH,而不是目录命令的参数cd,因此这与这里无关。

考虑一下如果指定目录是空字符串。假设CDPATH设置为“/foo/bar”,并且该目录存在。如果运行cd ""cd内置命令将计算“/foo/bar”+“/”+“”=“/foo/bar/”(这只是指定目录 /foo/bar 的更详细的方式),发现该目录存在,并移动到该目录。

相关内容