这是如何工作的 ls *[^0-9]*

这是如何工作的 ls *[^0-9]*

我正在学习通配符。我看到这 ls *[0-9]*会列出名称中带有数字的所有文件/目录,因此不应ls *[^0-9]*列出名称中间没有数字的所有文件/目录?我看到命令列出的一些文件有编号。

file1.txt并且file1~是曾经被列出的。

答案1

[0-9]匹配任何数字,因此*[0-9]*匹配任何至少包含一位数字的字符串。

[^0-9]匹配不是数字的字符,因此*[^0-9]*匹配任何至少包含一个非数字的字符串。

file1.txt既有数字又有非数字,因此它匹配两种模式。


对于常规文件名模式,无法使用单个模式来匹配不包含特定字符的字符串。

另一方面,使用正则表达式,^[^0-9]+$将匹配完全由非数字组成的字符串,就像+([^0-9])Bash 或 ksh 中的扩展 glob 一样。 ( shopt -s extglobBash 中需要。)

相关内容