Shell条件变量替换
个人博客地址:Shell条件变量替换 | 一张假钞的真实世界
Bash Shell可以进行变量的条件替换,条件放在{}
中,只有条件发生时才进行替换:
- ${v1:-$v2}
当变量v1未定义或者值为空时,返回v2的值,否则返回v1的值。
- ${v1:=$v2}
若变量v1未定义或者值为空时,在返回v2的值的同时将v2的值给v1。
- ${v1:?message}
若变量已赋值的话,正常替换。否则将消息message送到标准错误输出(若此替换出现在Shell程序中,那么该程序将终止运行)。
- ${v1:+$v2}
若变量已赋值的话,其值才用v2的值替换,否则不进行任何替换。
- ${v1:offset}、${v1:offset:length}
从变量中提取子串,这里offset和length可以是算术表达式。
- ${#v1}
变量的字符个数(变量的字符个数,并不是变量个数)。
- ${v1#pattern}、${v1##pattern}
去掉v1中与pattern相匹配的部分,条件是v1的开头与pattern相匹配。#与##的区别在于一个是最短匹配模式,一个是最长匹配模式。
- ${v1%pattern}、${v1%%pattern}
与上一条规则类似,只是从v1的尾部与pattern相匹配,%与%%的区别与#与##一样。
- ${v1/pattern/string}、${v1//pattern/string}
进行变量内容的替换,把与pattern匹配的部分替换为string的内容,/与//的区别与上同。
注意:上述条件变量替换中,除第2条外,其余均不影响变量本身的值。