* 是否匹配 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 执行通配。
今天我在目录及其子目录中寻找名为 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 执行通配。