为什么问号在这个 glob 中不起作用?

Sam*_*mer 2 bash wildcards

我在下面的 glob 中做错了什么?根据我对手册的阅读,它看起来应该可以工作。

一种 '?' (不在括号之间)匹配任何单个字符。

$ touch file.txt file.text
$ ls file.*
file.text  file.txt
$ ls file.te?xt
ls: cannot access 'file.te?xt': No such file or directory

$ bash --version
GNU bash, version 5.0.3(1)-release (x86_64-pc-linux-gnu)
Run Code Online (Sandbox Code Playgroud)

Kus*_*nda 5

?与单个字符匹配(如.在正则表达式)。您没有与该模式匹配的文件,file.te?xt因此该模式保持未展开状态。

您可能期望它像在正则表达式中一样工作,它的意思是“前一个表达式中的零个或一个”。不幸的是,在bash.

...除非您启用extglobshell 选项:

shopt -s extglob
Run Code Online (Sandbox Code Playgroud)

然后模式?(list)将匹配 中的零个或一个模式list

shopt -s extglob
Run Code Online (Sandbox Code Playgroud)