通配符与文件名变量

时间:2021-10-16 19:10:44
    用户很多时候只知道文件名的一部分,或者用户想同时对具有相同扩展名或以相同字符开始的多个文件进行操作。Shell提供了一组称为通配符的特殊符号,用于模式匹配,如文件名匹配、路径名搜索、字符串查找等。常用的统配符号有:(*),(?)和方括号[]。用户可以在作为命令参数的文件名中包含这些通配符,构成一个所谓的“模式串”,以在执行过程中进行模式匹配。

通配符及其说明

*:匹配任何字符和任何数目的字符组合
?:匹配任何单个字符
[ ]:匹配任何包含在括号里的单字符

注意:文件名前的圆点(.)和路径名中的斜线(/)必须显式匹配。例如”*”不能匹配.file,而”.*”才可以匹配.file。
通配符[ ]能匹配括号中给出的字符或字符范围。
[ ]代表指定的一个字符范围,只要文件名中[ ]位置处的字符在[ ]中指定的范围之内,那么这个文件名就与这个模式串匹配。[ ]中字符范围可以由直接给出的字符组成,也可以由表示限定范围的起始字符、终止字符及中间的连字符(-)组成。

注意:连字符(-)仅在方括号内有效,表示字符范围,如在方括号外就是普通字符。而“*”和“?”只在方括号外是通配符,若在方括号内,它们也失去通配符的能力,成为普通字符。由于“*”、“?”和[ ]对于Shell来说具有比较特殊的意义,因此在正常的文件名中不应出现这些字符。特别是在目录名中不要出现它们,否则Shell匹配起来可能会无穷递归下去。如果目录中没有与指定模式串相匹配的文件名,那么Shell将使用此模式串本身作为参数传给有关命令。这可能就是名中出现特殊字符的原因所在。