shell参数扩展说明 shell 参数扩展格式:
expression 表达式可以为任意的字符,直到匹配到 ‘}’ 为止,因此表达式包含 ‘}’ 的话需要用转义或者用单引号包含起来。
值替换 1 2 3 4 5 6 7 8 9 10 11 ${parameter:-word} 如果 parameter 为 null 或者未设置,整个参数替换表达式值为 word ${parameter:=word} 如果 parameter 为 null 或者未设置,整个参数替换表达式值为 word,并且 parameter 参数值设置为 word ${parameter:?word} 如果 parameter 为 null 或者未设置,则打印出错误信息。否则,整个参数替换表达式值为 $parameter ${parameter:+word} 如果 parameter 不为 null 或者未设置,则整个参数替换表达式值为 word
字符串替换 1 2 3 4 5 ${parameter/pattern/string} ${parameter//pattern/string} 将 parameter 对应值的 pattern 字符串替换成为 string 字符串 /表示只替换一次 //表示全部替换
例子:
1 2 3 4 5 6 7 8 9 10 ${parameter/pattern/string} var="3/1/2/3333" echo ${var/3/6} 6/1/2/3333 ${parameter//pattern/string} var="3/1/2/3333" echo ${var//3/6} 6/1/2/6666
字符串长度
例子:
1 2 3 4 5 ${#parameter} var="Hello" echo ${#var} 5
字符过滤 1 2 3 4 5 6 7 8 9 10 11 ${parameter%word} ${parameter%%word} word 支持通配符,从尾开始匹配 word,将匹配 word 正则表达式的字符删除 % 为最短匹配,%% 为最长匹配 ${parameter#word} ${parameter##word} word 支持通配符,从头开始扫描 word,将匹配 word 正则表达的字符删除 #为最短匹配,##为最长匹配 注意,匹配成功就停止继续匹配,也就是只匹配一次。最长匹配一般是针对通配符,能够匹配到最长字符串,也就是即时匹配成功,还会继续匹配,取最后一次匹配成功的。
例子:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 ${parameter%word} x=file.c echo ${x%.c}.o file.o ${parameter%%word} x=posix/src/std echo ${x%%/*} posix ${parameter#word} x=$HOME/src/cmd echo ${x#$HOME} /src/cmd ${parameter##word} x=/one/two/three echo ${x##*/} three
See also http://pubs.opengroup.org/onlinepubs/009695399/utilities/xcu_chap02.html#tag_02_06_02