我在下面的全局中做错了什么?根据我的阅读,它看起来应该有效手册。
A '?' (不在括号之间)匹配任何单个字符。
$ 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)
答案1
匹配?
单个字符(就像.
在正则表达式中一样)。您没有与该模式匹配的文件file.te?xt
,因此该模式保持未展开状态。
您可能期望它像在正则表达式中一样工作,它的意思是“零个或前一个表达式之一”。不幸的是, 中没有这样的通配符bash
。
...除非您启用extglob
shell 选项:
shopt -s extglob
然后该模式?(list)
将与 中的零个或一个模式匹配list
。
$ shopt -s extglob
$ ls file.t?(e)xt
file.text file.txt