为什么 `ls -d *[!e]*` 显示所有文件而不是省略所有包含 e 的文件?

为什么 `ls -d *[!e]*` 显示所有文件而不是省略所有包含 e 的文件?

ls -d *e*打印出其中包含“e”的所有文件。但相反,ls -d *[!e]*似乎行不通。到底是为什么呢?

是因为ls*其作为自己的参数并扩展了所有文件吗?

我知道我可以这样做:(ls -d !(*e*)在 Bash 中使用extglobset,或在 ksh 中)。

答案1

该 glob 实际上所做的是匹配任意数量的字符,然后匹配除 e 之外的单个字符,然后匹配任意数量的字符。它将匹配名称不完全由 e 组成的任何文件。

相关内容