`locate` 通配符的奇怪行为-为什么?

`locate` 通配符的奇怪行为-为什么?

locate "*.png"正如预期的那样,返回所有以 结尾的文件.png

locate "test.*"没有返回任何内容,但是test我的系统中有命名的文件。

locate "*test"正如预期的那样,返回所有以 结尾的文件test

locate "test*"没有返回任何内容,但test我的系统中存在以 开头的文件。

为什么通配符似乎只对“以...结尾”有效?

答案1

locate "test.*"没有返回任何内容,但我的系统中存在名为 test 的文件。

.被视为点,而不是像正则表达式中的任意字符,因此test.*不匹配test,但是test.foo

locate "test*"没有返回任何内容,但test我的系统中存在以 开头的文件。

查找商店文件的完整路径,因此要查找以 test 开头的文件,您应该使用locate "*/test*"

最后一点可能会令人困惑,因为locate foo会找到包括在内的任何内容foo,因此模式被解释为*foo*。如果模式中已经有一个通配符,则模式似乎没有被星号括起来。

免责声明:我做了一些测试,这些是我的结论,我无法通过引用手册页来证明它们,这似乎非常简陋。

相关内容