bash 中的 cd <nonexistent_directory> 导致 cd 到不同的目录?

use*_*869 6 linux bash

好的,所以我已经使用 Linux 18 年了,从来没有见过或听说过这样的事情:

starting-forth$ ls
ch01/  ch02/  ch04/  ch05/  ch06/  text/
starting-forth$ cd ch07  # A directory I thought I might exist, but didn't
ch04
ch04$
Run Code Online (Sandbox Code Playgroud)

哇?!好的,只是为了确保:

ch04$ pwd
/home/m/learn/forth/starting-forth/ch04
Run Code Online (Sandbox Code Playgroud)

我的 shell 是 bash,在虚拟终端 [LilyTerm,确切地说],在 XFCE 会话中,在 Manjaro Linux 上。我认为我没有进行任何奇怪的自定义,并且整个系统相当新(2014 年 10 月在新笔记本电脑上首次安装)。

那么,任何人都知道是什么导致了这种情况?

更新:我之前没有想到的一个事实(尽管我不知道为什么会如此)是这发生在 Git 工作目录中。

更新 2:显然,只要存在名称相同的现有目录,除了最后一个字符(或两个字符?),作为我尝试 cd 到的不存在目录时,就会发生这种行为。例如:

[tmp]$ mkdir dxx17903
[tmp]$ cd dxx17907
dxx17903
[tmp]$ cd dxx179035
dxx17903
[dxx17903]$ cd ..
[tmp]$ cd dxx179005
bash: cd: dxx179005: No such file or directory
[tmp]$ cd dxx179
bash: cd: dxx179: No such file or directory
[tmp]$ cd dxx1790
dxx17903
[dxx17903]$ cd ..
[tmp]$ mkdir foot
[tmp]$ mkdir food
[tmp]$ cd fool
foot
[foot]$ cd ..
[tmp]$ cd football
bash: cd: football: No such file or directory
[tmp]$ cd foo
foot
[foot]$
Run Code Online (Sandbox Code Playgroud)

依此类推……当有多个目录“匹配”(以这种奇怪且不受欢迎的方式)时,您转到的目录是第一个创建的目录。

Sco*_*ott 3

查看

\n\n
shopt cdspell\n
Run Code Online (Sandbox Code Playgroud)\n\n

如果设置了此项,并且您cd访问的目录不存在,\nshell 将查看是否存在名称与您键入的名称相似的目录\n。\xc2\xa0\n(它假定您创建了一个拼写错误。)\xc2\xa0\n如果它找到与您输入的内容类似的内容,\n它会假设这就是您的意思,\n而且它是众所周知的不加区分的\xe2\x80\x94\n如果有多个名称与您输入的内容类似键入\n(例如,cabcadcancapcarcat),\nit 会选择一个,看似随机。

\n\n

或者,也许它是目录中第一个出现的目录\n(可能是最旧的目录)。

\n