操作符,${}

1 取值

echo ${var}

2 模式匹配删除

${var#pattern}
${var##pattern}
${var%pattern}
${var%%pattern}
  • #删除前面的,%删除后面的
  • 一个符号匹配最短的,两个符号匹配最长的
  • 操作符之后pattern是要删除的部分
  • pattern可以用基本通配符
path=/home/zlx/sh/test.sh.bak
运算符 替换
${var#pattern} 如果模式匹配于变量的开头处,则删除匹配的最短部分,并返回剩下的部分
${path#/*/} 结果zlx/sh/test.sh.bak
${var##pattern} 如果模式匹配于变量的开头处,则删除匹配的最长部分,并返回剩下的部分
${path##/*/} 结果test.sh.bak
${var%pattern} 如果模式匹配于变量的结尾处,则删除匹配的最短部分,并返回剩下的部分
${path%.*} 结果/home/zlx/sh/test.sh
${var%%pattern} 如果模式匹配于变量的结尾处,则删除匹配的最长部分,并返回剩下的部分
${path%%.*} 结果/home/zlx/sh/test

 

 

 

 

 

 

 

 

 

3 模式匹配替换

${var/foo/bar}
${var//foo/bar}
  • 用bar去替换foo
  • foo可以用基本通配符
  • 一个斜杠是替换第一个,两个斜杠是全部替换

4 值替换

${varname:-word}
${varname:=word}
${varname:?message}
${varname:+word}    
  • 每个运算符内的冒号(:)都是可选的。如果省略冒号,则将每个定义中的“存在且非null”部分改为“存在”,也就是说,运算符仅用于测试变量是否存在。
运算符 替换
${varname:-word} 如果varname存在且非null,则返回其值;否则,返回word。
用途:如果变量未定义,则返回默认值。
${varname:=word} 如果varname存在且非null,则返回其值;否则,设置它为word,并返回其值。
用途:如果变量未定义,则设置变量为默认值。
${varname:?message} 如果varname存在且非null,则返回其值;否则,显示varname: message,并退出当前的命令或脚本。
用途:为了捕捉由于变量未定义所导致的错误。
${varname:+word} 如果varname存在且非null,则返回word;否则,返回null。
用途:为测试变量的存在。

 

 

 

 

 

 

 

posted @ 2013-01-08 17:17  signorino 13  阅读(177)  评论(0)    收藏  举报