通配符是由shell處理的, 它只會出現在 命令的“參數”里。當shell在“參數”中遇到了通配符時,shell會將其當作路徑或文件名去在磁盤上搜尋可能的匹配:若符合要求的匹配存在,則進行代換(路徑擴展);否則就將該通配符作為一個普通字符傳遞給“命令”,然后再由命令進行處理。總之,通配符 實際上就是一種shell實現的路徑擴展功能。在 通配符被處理后, shell會先完成該命令的重組,然后再繼續處理重組后的命令,直至執行該命令。
SHELL中的通配符
幫助手冊:# man 7 glob
* |
匹配任意長度的任意字符,可以是0個 |
? |
匹配任意單個字符,必須是1個 |
[ ] |
匹配指定字符范圍內的任意單個字符 |
[a-z,A-Z,0-9] |
匹配所有數字字母,可以不加逗號 |
[a-z] |
表示a-z,A-Y,表示a,A,b,B.....a。不包含Z |
[A-Z] |
表示A,b,B.....z,Z。不包含a |
[a-Z] |
表示所有大小寫字母 |
[:upper:] |
所有大寫字母 |
[:lower:] |
所有小寫字母 |
[:alpha:] |
所有字母,大小寫 |
[:digit:] |
所有數字 |
[:alnum:] |
所有數字+字母 |
[:blank:] |
水平空白字符 |
[:space:] |
水平或垂直空白字符 |
[:punct:] |
標點符號 |
[:print:] |
可打印字符 |
[:cntrl:] |
控制(非打印)字符 |
[:graph:] |
圖形字符 |
[:xdigit:] |
十六進制字符 |
[^] |
匹配指定字符范圍外的任意單個字符 |
[^0-9] |
相當於[^[:digit:]] |
[^a-z] |
表示Z + 其他 |
[^A-Z] |
表示a + 其他 |
示例:
1、顯示/etc目錄下,所有以.d結尾的文件或目錄
# ls -d /etc/*.d /etc/bash_completion.d /etc/modprobe.d /etc/rc6.d /etc/binfmt.d /etc/modules-load.d /etc/rc.d /etc/chkconfig.d /etc/my.cnf.d /etc/request-key.d /etc/cron.d /etc/pam.d /etc/rsyslog.d /etc/depmod.d /etc/popt.d /etc/rwtab.d /etc/dracut.conf.d /etc/prelink.conf.d /etc/setuptool.d /etc/exports.d /etc/profile.d /etc/statetab.d /etc/gdbinit.d /etc/rc0.d /etc/sudoers.d /etc/grub.d /etc/rc1.d /etc/sysctl.d /etc/init.d /etc/rc2.d /etc/tmpfiles.d /etc/krb5.conf.d /etc/rc3.d /etc/xinetd.d /etc/ld.so.conf.d /etc/rc4.d /etc/yum.repos.d /etc/logrotate.d /etc/rc5.d
2、顯示/etc目錄下,所有.conf結尾,且以m,n,r,p開頭的文件或目錄
#ls -d /etc/[mnrp]*.conf /etc/man_db.conf /etc/nfsmount.conf /etc/resolv.conf /etc/mke2fs.conf /etc/nsswitch.conf /etc/rsyncd.conf /etc/nfs.conf /etc/request-key.conf /etc/rsyslog.conf