bash通配符n位数

Raf*_*afe 2 linux bash wildcard

所以我在tmp目录中有以下文件:

 file.0
 file.1
 file.t9
 file.22
 file.4444
Run Code Online (Sandbox Code Playgroud)

如果我只想列出以'.digits'(0,1,22,4444)结尾但不是(t9)的文件,我可以尝试使用这样的通配符:

 ls tmp/file.{[0-9],[0-9][0-9],[0-9][0-9][0-9],[0-9][0-9][0-9][0-9]}
Run Code Online (Sandbox Code Playgroud)

但是由于丑陋的错误我得到了以下结果

 ls: cannot access tmp/file.[0-9][0-9][0-9][0-9]: No such file or directory
 file.0
 file.1
 file.22
 file.4444
Run Code Online (Sandbox Code Playgroud)

我也尝试使用{0..999},但这也会导致相同类型的错误(以及更多错误).如何做到这一点的线索没有专家的错误?

Sto*_*ica 15

至少在bash 4中,extglob启用shell选项时:

shopt -s extglob
ls /tmp/file.+([0-9])
Run Code Online (Sandbox Code Playgroud)

+([0-9])那里的模式匹配一个或多个数字.

您可以在模式匹配部分中阅读有关此内容的更多信息man bash.

UPDATE

实际上,正如@chepner所指出的那样,自从extglob版本2.02 开始以来,这应该适用于bash你今天遇到的每一个,除非你把你的发行版从岩石或其他东西中拉出来.

  • `extglob` 是在 2.02 版本中引入的。 (2认同)