1、参数替换
1、${var_name}等价于$var_name
2、$(var:-default) 和$(var-default)
$(var:-default) 当var为空或未定义时整个表达式的值为default
$(var-default) 当且仅当var未定义时整个表达式的值为default
[root@localhost ~]# str1=""
[root@localhost ~]# str2=${str1:-"example"}
[root@localhost ~]# str3=${str1-"example"}
[root@localhost ~]# str4=${str0-"example"}
[root@localhost ~]# echo $str2
example
[root@localhost ~]# echo $str3
[root@localhost ~]# echo $str4
example
[root@localhost ~]#
注解:由于
str1
为空,故str2
赋值为"example"
3、$(var:=default) 和$(var=default)
$(var:=default) 当var为空或未定义时整个表达式的值为default,并且将var的值设置为default
$(var=default) 当且仅当var未定义时整个表达式的值为default,并且将var的值设置为default
[root@localhost ~]# str1=""
[root@localhost ~]# str5=${str1:="example"}
[root@localhost ~]# str6=${str1="example"}
[root@localhost ~]# str7=${str0="example"}
[root@localhost ~]# echo $str5
example
[root@localhost ~]# echo $str6
example
[root@localhost ~]# echo $str7
example
[root@localhost ~]# echo $str1
example
[root@localhost ~]# echo $str0
example
[root@localhost ~]#
4、$(var:?default) 和$(var?message)
$(var:?message) 当var为空或未定义时,打印错误信息,信息内容为message表示的值
$(var?message) 当且仅当var未定义时,打印错误信息,信息内容为message表示的值
[root@localhost ~]# str1=""
[root@localhost ~]# unset str0
[root@localhost ~]# str8=${str1:?wrong}
-bash: str1: wrong
[root@localhost ~]# str8=${str1?wrong}
[root@localhost ~]# echo $str8
[root@localhost ~]#
5、$(var:+default) 和$(var+default)
$(var:+default) 当var已定义且不为空时整个表达式的值为default
$(var+default) 当var已定义时整个表达式的值为default(不管var是否是空)
[root@localhost ~]# str1=""
[root@localhost ~]# unset str0
[root@localhost ~]# echo ${str1:+"example"}
[root@localhost ~]# echo ${str1+"example"}
example
[root@localhost ~]# str2="string"
[root@localhost ~]# echo ${str2:+"example"}
example
[root@localhost ~]# echo ${str2+"example"}
example
[root@localhost ~]#
2、字符串截取
1、${str:offest} 从下标offset(含)开始截取到末尾的子串
2、${str:offest:length} 从下表offset(含)开始向后截取长度为length的子串,长度超出不报错
3、${str:offest:index} 此处的index为负数,最后一个字符为-1,依次往前为-2,-3。此表达式截取offset(含)到index(不含)
之间的子串,当index表示的位置在offset左边时会报错
3、变量匹配
1、${!prefix*}、${!prefix@} 将带有前缀为prefix的变量名打印出来
4、数组操作
1、${!name[@]}、${!name[*]} 将数组name的所有下标返回,如果变量name不是数组则返回0,不存在则空
2、${name[@]}、${name[*]}将数组name的所有元素返回,如果变量name不是数组则返回name的值,不存在则空
3、${name[index]} 将数组name的index处的元素返回,如果变量name不是数组且index为0时返回name的值,变量或索
index处的元素不存在则返回空
4、${#name[*]}、${#name[@]} 将数组name的长度返回
[root@localhost ~]# name=(Pedro Gary Jane)
[root@localhost ~]# echo ${!name[*]}
0 1 2
[root@localhost ~]# echo ${name[*]}
Pedro Gary Jane
[root@localhost ~]# echo ${#name[*]}
3
[root@localhost ~]#
5、正则匹配替换
1、${parameter#word}、${parameter##word}
从头开始扫描word,将匹配word正则表达的字符过滤掉
#为最短匹配,##为最长匹配
2、${parameter%word}、${parameter%%word}
从尾开始扫描word,将匹配word正则表达式的字符过滤掉
%为最短匹配,%%为最长匹配
3、${parameter/pattern/string}、${parameter//pattern/string}
/表示只替换一次
//表示全部替换
本文分享自 WriteSimpleDemo 微信公众号,前往查看
如有侵权,请联系 cloudcommunity@tencent.com 删除。
本文参与 腾讯云自媒体同步曝光计划 ,欢迎热爱写作的你一起参与!