本文作者: jsweibo
本文链接: https://jsweibo.github.io/2019/05/23/bash%E4%B8%AD%E7%9A%84%E6%96%87%E4%BB%B6%E5%90%8D%E6%89%A9%E5%B1%95/
摘要
本文主要讲述了:
- dotglob
- /
- globstar
正文
在分词之后,bash 会在每个单词中检索*
、?
和[
。如果出现了这其中的任意一个字符,该单词就会被视为模式,而后进行模式匹配。关于 bash 中的模式匹配请参见bash中的模式匹配和bash中的模式匹配扩展。
- 如果模式匹配匹配到了文件名,则该单词被替换为按照字母顺序排列的文件名列表
- 如果模式匹配没有匹配到文件名,但启用了 shell 的
nullglob
选项,则删除该单词 - 如果模式匹配没有匹配到文件名,且禁用了 shell 的
nullglob
选项,则保留该单词
dotglob
当模式匹配被用于文件名扩展时,除非启用了 shell 的dotglob
选项,否则必须显式匹配文件名开头的.
。
示例:
- 禁用了 shell 的
dotglob
选项之后,*
不匹配以.
开头的所有文件名 - 禁用了 shell 的
dotglob
选项之后,?
不匹配.
但即使启用了 shell 的dotglob
选项之后,.
和..
(目录)依旧需要显式匹配。
示例:
- 启用
dotglob
选项之后,*
匹配以.
开头的所有文件名,但*
不匹配.
和..
(目录)
/
在匹配文件名时,/
(路径段分隔符)始终需要显式匹配。
示例:
*
不能匹配子目录下的文件,只能匹配 CWD 的所有文件和所有子目录*/
匹配 CWD 的所有子目录*/*
匹配 CWD 的所有子目录下的所有文件
globstar
当启用了 shell 的globstar
选项之后,**
能递归匹配所有文件、零或更多目录与子目录。**/
只能递归匹配零或更多目录与子目录。
1 |
|
示例:
**/*
相当于**
,递归匹配所有文件、零或更多目录与子目录**/*.md
递归匹配以.md
结尾的所有文件、所有以.md
结尾的零或更多目录与子目录
参考资料
本文作者: jsweibo
本文链接: https://jsweibo.github.io/2019/05/23/bash%E4%B8%AD%E7%9A%84%E6%96%87%E4%BB%B6%E5%90%8D%E6%89%A9%E5%B1%95/
本文对你有帮助?请支持我
- 本文链接: https://jsweibo.github.io/2019/05/23/bash%E4%B8%AD%E7%9A%84%E6%96%87%E4%BB%B6%E5%90%8D%E6%89%A9%E5%B1%95/
- 版权声明: 除非另有说明,否则本网站上的内容根据署名-非商业性使用-相同方式共享 4.0 国际 (CC BY-NC-SA 4.0) 进行许可。