我正在学习通配符。我看到这
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 extglob
Bash 中需要。)