本文主要详细介绍Bash中{}的详细用法,由于Bash中的变量类型只有字符串故下文字符串与变量同指代Bash中的变量,部分配有例子。
字符串基本
string=1234.123
- 分隔变量与字符串
echo ${string}1 #1234.1231
- ${#string}统计变量字符串长度
echo ${#string} #8
- ${string:start:length}截取字符串,从第start个字符开始共length个字符
echo ${string:7:1} #3
echo ${string:(-4)} #.123
字符串匹配切片(可用来踢去文件后缀,文件路径等)
- ${string#substring}删除最先匹配到的字符(substring)的左边
- ${string##substring}删除最后匹配到的字符(substring)的左边
stringZ=abcABC123ABCabc
#删除最先匹配的左边
echo ${stringZ#a*C} #123ABCabc
#删除最后匹配到的左边
echo ${stringZ##a*C} #abc
- ${string%substring}从string后边开始匹配,删除最先匹配到(substring)的右边
- ${string%%substring}从string后边开始匹配,删除最后匹配到(substring)的右边
string=abcABC123ABCabc
echo ${string%abc} #abcABC123ABC
echo ${string%%A*} #abc
注意本小节中的substring必须为全匹配
,所以例子中才会出现通配符*,如下:
string=abcABC123ABCabc
echo ${string##123} #abcABC123ABCabc
echo ${string%%123} #abcABC123ABCabc
字符串替换
- ${string/substring/replacement} 将第一个匹配到的substring替换为replacement
- ${string//substring/replacement} 将所有匹配到的substring替换为replacement
string=abcABC123ABCabc
echo ${string/abc/xyz} #xyzABC123ABCabc
echo ${string//abc/xyz} #xyzABC123ABCxyz
- ${string/#substring/replacement} 将字符串开始匹配(全匹配)到的第一个substring用replacement替换
- ${string/%substring/replacement} 从字符串末尾开始匹配,将第一个匹配(全匹配)到的substring用replacement替换
string=abcABC123ABCabc
echo ${string/#a*c/xyz} #xyz
echo ${string/%abc/xyz} #abcABC123ABCxyz
变量判断
- ${parameter-default}, ${parameter:-default}
如果变量parameter没有赋值,default最为parameter默认值,:的区别在于变量parameter已经被声明但是null
- ${parameter=default}, ${parameter:=default}
如果变量parameter没有声明,default最为parameter默认值,:的区别在于变量parameter已经被声明但是null
- ${parameter+alt_value}, ${parameter:+alt_value}
如果变量parameter已经设定,使用alt_value,否则使用null
- ${parameter?err_msg}, ${parameter:?err_msg},:的区别在于变量parameter已经被声明但是null
如果变量parameter已经设定,使用变量,否则打印err_msg退出脚本返回状态码1