LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 163|回复: 0

Shell脚本深入教程:Bash路径通配规则

[复制链接]
发表于 2023-12-13 15:18:58 | 显示全部楼层 |阅读模式

Bash路径通配规则
*:匹配任意个任意字符
?:匹配任意单个字符
[]:中括号通配。包括下面几种模式:
  [abc]:匹配中括号中任意单个字符,即匹配a或b或c均可
  [^abc]和`[!abc]`:匹配非中括号中的任意单个字符
  [a-z]:匹配abc...z,但和Locale环境的排序规则有关。
         Locale C环境下,[a-d]表示abcd,字典排序规则的[a-d]表示aBbCcDd
  字符类:
    [:alpha:]、[:alnum:]、[:ascii:]、[:blank:]、[:cntrl:]、
    [:digit:]、[:graph:]、[:lower:]、[:print:]、[:punct:]、
    [:space:]、[:upper:]、[:word:]、[:xdigit:]
此外:

(1).如果开启了globstar,则双星号**可以递归匹配目录。例如:

shopt -s globstar
grep 'PATH' /etc/**/*.sh
(2).如果开启了dotglob,则*可以匹配以点开头的隐藏文件。例如:

shopt -s dotglob
ls ~/*bashrc
(3).如果开启了extglob,则可以使用下面列出的复杂匹配模式。下面的pattern-list是一个或多个简单pattern,多个pattern之间使用竖线|隔开,且下面的模式可以组合。

?(pattern-list)
匹配0到1次

*(pattern-list)
匹配0或多次

+(pattern-list)
匹配1或多次

@(pattern-list)
多选一

!(pattern-list)
匹配不能被pattern匹配的部分
例如:

$ touch abcdef33.sh ABCdef4f.sh
$ ls *(abc*|ABC*)?([:digit:]*)
abcdef33.sh ABCdef4f.sh
更全的通配介绍:

# 1.通配符(包括*)会扩展成所有能匹配的文件名
$ echo ls /*tc    # ls /etc

# 2.开启globstar(默认没开启),可以让连续的两个星号**递归匹配
$ shopt -s globstar
$ echo ls /etc/**/*.conf

# 3.开启dotglob(默认没开启),可以让星号*匹配以点开头的隐藏文件
$ shopt -s dotglob
$ echo ls ~/*bashrc  # ls $HOME/.bashrc

# 4.开启nocaseglob(默认没开启),可以在匹配文件名的时候忽略大小写
$ shopt -s nocaseglob
$ echo ls *TC     # ls etc

# 5.默认情况下,如果没有文件名匹配成功,则保留通配符号
$ echo ls /*tcx   # ls /*tcx

# 6.如果开启failglob(默认没开启),如果没有文件名可以匹配成功,将报错,而不是默认情况下的保留通配符
$ shopt -s failglob
$ echo ls *tcx    #  -bash: no match: *tcx

# 7.如果开启nullglob(默认没开启),如果没有文件名可以匹配成功,则带有通配符部分的单词全都替换成空字符串
$ shopt -s nullglob
$ echo ls *tcx    # ls
文章链接: https://www.junmajinlong.com/shell/script_course/shell_glob/
您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表