操作符,${}
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。 用途:为测试变量的存在。 |
浙公网安备 33010602011771号