使用bash通配符定位行为

时间:2014-08-06 00:01:49

标签: linux bash shell

我有

$ ls -l re*trict
ls: cannot access re*trict: No such file or directory

为什么这会给0匹配?

$ locate -c 're*trict'
0
$ locate -c re*trict
0
$ locate -c re?trict
0

这虽然有效但给出了8351个匹配项:

$ locate -c restrict
8351

2 个答案:

答案 0 :(得分:1)

locate与完整路径名匹配。要将re*trict作为子字符串查找,您必须在其前后添加*

locate '*re*trict*'

答案 1 :(得分:0)

我认为答案可以在手册页上找到:

如果任何PATTERN不包含全局字符,则locate的行为就像模式是* PATTERN *。

由于我的PATTERN包含一个globbing字符,因此它不会扩展为* PATTERN *,因此尝试找到文字匹配。显然,没有名称的文件(替换s)'restrict',因为即使在root下,此类文件的名称也是/re?trict,并且由于前导/

,匹配将失败