ls -d *e*
打印出其中包含“e”的所有文件。但相反,ls -d *[!e]*
似乎行不通。到底是为什么呢?
是因为ls
将*
其作为自己的参数并扩展了所有文件吗?
我知道我可以这样做:(ls -d !(*e*)
在 Bash 中使用extglob
set,或在 ksh 中)。
答案1
该 glob 实际上所做的是匹配任意数量的字符,然后匹配除 e 之外的单个字符,然后匹配任意数量的字符。它将匹配名称不完全由 e 组成的任何文件。
ls -d *e*
打印出其中包含“e”的所有文件。但相反,ls -d *[!e]*
似乎行不通。到底是为什么呢?
是因为ls
将*
其作为自己的参数并扩展了所有文件吗?
我知道我可以这样做:(ls -d !(*e*)
在 Bash 中使用extglob
set,或在 ksh 中)。
该 glob 实际上所做的是匹配任意数量的字符,然后匹配除 e 之外的单个字符,然后匹配任意数量的字符。它将匹配名称不完全由 e 组成的任何文件。