前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >linux ${}表达式详解

linux ${}表达式详解

作者头像
PedroQin
发布2019-12-18 11:18:46
7860
发布2019-12-18 11:18:46
举报
文章被收录于专栏:WriteSimpleDemo

1、参数替换

1、${var_name}等价于$var_name

2、$(var:-default) 和$(var-default)

$(var:-default) 当var为空或未定义时整个表达式的值为default

$(var-default) 当且仅当var未定义时整个表达式的值为default

代码语言:javascript
复制
[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

代码语言:javascript
复制
[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表示的值

代码语言:javascript
复制
[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是否是空)

代码语言:javascript
复制
[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的长度返回

代码语言:javascript
复制
[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}

/表示只替换一次

//表示全部替换

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2018-10-10,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 WriteSimpleDemo 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档