bash--[字符] 的通配符

bash--[字符] 的通配符

有没有办法使用[characters],例如[:upper:],就像它们是通配符一样?例如,假设我有一个包含以下文件的目录:

AAA
AA
aaa
aa
BBB
BB
bbb
bb

现在假设我想要ls所有以至少两个小写字母开头的文件。有没有ls [[:lower]][[:lower:]]*更有效的方法来做到这一点,本质上就是“通配符数[[:lower:]],然后是通配符?”

另外,为什么不只是以两个小写字母开头,而是仅以两个小写字母开头,而不是 * 小写字母?(即?而不是*)?谢谢

答案1

你可以使用扩展通配符

如果extglob使用内置命令启用了 shell 选项shopt,则可以识别几个扩展的模式匹配运算符。在下面的描述中,模式列表是一个或多个模式的列表,以“ |”分隔。复合模式可以使用以下一个或多个子模式形成:

(?(模式列表)
匹配零次或一次给定的模式。

*(模式列表)
匹配零次或多次给定的模式。

+(模式列表)
匹配给定模式的一个或多个出现。

@(模式列表)
匹配给定的模式之一。

!(模式列表)
匹配除给定模式之一之外的任意内容。

至于你问的问题,我无法理解这一点:

...所有以至少两个小写字母开头的文件...“[[:lower:]] 的通配符数,然后是通配符?”

通配符匹配零个或多个,这与两个或多个不同。[[:lower:]]可以使用扩展的 glob 匹配任意数量的 s *([[:lower:]])。“至少两个”根本不需要扩展的 glob [[:lower:]][[:lower:]]*:。

... 仅以 2 个小写字母开头,而不是 * 小写字母

[[:lower:]][[:lower:]]?([^[:lower:]]*)

它是两个小写字符,后面可选跟着(除小写字符之外的任意字符和任何内容)。

相关内容