参数扩展还包括了一些模式匹配功能,该功能带有在文件名扩展或 globbing 中使用的通配符功能。注意:这不是 grep
使用的正则表达式匹配。
扩展 | 目的 |
---|---|
${PARAMETER#WORD} | shell 像文件名扩展中那样扩展 WORD,并从 PARAMETER 扩展后的值的开头删除最短的匹配模式(若存在匹配模式的话)。使用 ‘@’ 或 ‘$’ 即可删除列表中每个参数的模式。 |
${PARAMETER##WORD} | 导致从开头删除最长的匹配模式而不是最短的匹配模式。 |
${PARAMETER%WORD} | shell 像文件名扩展中那样扩展 WORD,并从 PARAMETER 扩展后的值末尾删除最短的匹配模式(若存在匹配模式的话)。使用 ‘@’ 或 ‘$’ 即可删除列表中每个参数的模式。 |
${PARAMETER%%WORD} | 导致从末尾删除最长的匹配模式而不是最短的匹配模式。 |
${PARAMETER/PATTERN/STRING} | shell 像文件名扩展中那样扩展 PATTERN,并替换 PARAMETER 扩展后的值中最长的匹配模式(若存在匹配模式的话)。为了在 PARAMETER 扩展后的值开头匹配模式,可以给 PATTERN 附上前缀 #,如果要在值末尾匹配模式,则附上前缀 %。如果 STRING 为空,则末尾的 / 可能被忽略,匹配将被删除。使用 ‘@’ 或 ‘$’ 即可对列表中的每个参数进行模式替换。 |
${PARAMETER//PATTERN/STRING} | 对所有的匹配(而不只是第一个匹配)执行替换。 |
清单 11 给出了模式匹配扩展的一些基本用法。
清单 11. 模式匹配示例
[ian@pinguino ~]$ x="a1 b1 c2 d2" [ian@pinguino ~]$ echo ${x#*1} b1 c2 d2 [ian@pinguino ~]$ echo ${x##*1} c2 d2 [ian@pinguino ~]$ echo ${x%1*} a1 b [ian@pinguino ~]$ echo ${x%%1*} a [ian@pinguino ~]$ echo ${x/1/3} a3 b1 c2 d2 [ian@pinguino ~]$ echo ${x//1/3} a3 b3 c2 d2 [ian@pinguino ~]$ echo ${x//?1/z3} z3 z3 c2 d2 |