* 是否匹配 bash 中 glob 中的连字符?

Does * match hyphens in a glob in bash?

今天我在目录及其子目录中寻找名为 cfg-local.properties 的文件。

我用过:

find . -iname *.properties

输出:

./gradle.properties

然后,我尝试了:

find . -iname *-*.properties

输出:

./cfg/src/test/resources/cfg-local.properties
./cfg/src/main/resources/cfg-local.properties
./cfg/build/classes/test/cfg-local.properties
./cfg/build/resources/test/cfg-local.properties
./cfg/build/resources/main/cfg-local.properties

星号不应该匹配 glob 表达式中的任何字符,包括连字符吗?

是的,它会匹配,但是您实际上 运行正在执行命令:

find . -iname gradle.properties

成立,运行:

find . -iname '*.properties'

当您键入 运行 find . -iname *.properties 时,*.properties 部分将由 shell 扩展以匹配文件。 (一个称为 globbing 的过程)。

在您的第二个示例中,find . -iname *-*.properties*-*.properties 不匹配任何文件,因此不执行文件名扩展并且 *-*.properties 逐字传递给 find命令。

将单词括在单引号内,如 '*.properties' 将阻止 shell 执行通配。