欢迎光临 www.huangdc.com

shell 变量替换与扩展

Linux huangdc 2371℃ 0评论

变量替换

${varname:-word}    如果变量varname存在且非null,则返回其值,否则,返回word

${varname-word}     如果变量varname存在,则返回其值,否则,返回word

${varname:+word}    如果变量varname存在且非null,则返回word,否则,返回null

${varname+word}     如果变量varname存在,则返回word,否则,返回null

${varname:=word}   如果变量varname存在且非null,则返回其值,否则,设置它为word,并返回word

${varname=word}     如果变量varname存在,则返回其值,否则,设置它为word,并返回word

${varname:?word}    如果变量varname存在且非null,则返回其值,否则,显示varname:word,并退出当前的命令或脚本,省略word会出现默认的信息parameter null or not set。

${varname?word}     如果变量varname存在,则返回其值,否则,显示varname:word,并退出当前的命令或脚本,省略word会出现默认的信息parameter null or not set。

模式匹配运算

(注意:这里用的模式都是通配字符模式,而非正则表达式)

假设变量 path=/home/tolstoy/mem/long.file.name

${variable#pattern}      如果模式匹配于变量的开头处,则删除匹配的最短部分,并且返回剩下的部分

例如:${path#/*/}        结果: tolstoy/mem/long.file.name

${variable##parttern}  如果模式匹配于变量的开头处,则删除匹配的最长部分,并且返回剩下的部分

例如:${path##/*/}        结果: long.file.name

${variable%parttern}    如果模式匹配于变量的结尾处,则删除匹配的最短部分,并且返回剩下的部分

例如:${path%.*}           结果: /home/tolstoy/mem/long.file

${variable%%parttern} 如果模式匹配于变量的结尾处,则删除匹配的最长部分,并且返回剩下的部分

例如:${path%%.*}        结果: /home/tolstoy/mem/long

特殊情况

${#var}  表示字符串长度

$#  ${#*} ${#@} 表示位置参数的个

对于数组来说,${#array_name} 表示的是数组中第一个元素的长度

对于数组来说,${#array_name[*]}和${#array_name[@]}表示数组中元素的个数

四、参数扩展与模式匹配

参数形式 扩展后

x{y,z} xy xz

${x}{y, z} ${x}y ${x}z

${x}{y, $z} ${x}y ${x}${z}

${param#pattern} 从param前面最小删除pattern的匹配

${param##pattern} 从param前面最大删除pattern的匹配

${param%pattern} 从param后面最小删除pattern的匹配

${param%%pattern} 从param后面最大删除pattern的匹配

${param/pattern/string} 从param中用string替换pattern的第一次匹配,string可为空

${param//pattern/string} 从param中用string替换pattern的所有匹配,string可为空

${param:3:2} 截取$param中索引3开始的2个字符

${param:3} 截取$param中索引3至末尾的字符

${@:3:2} 截取参数列表$@中第3个开始的2个参数

${param:-word} 若$param为空或为设置,则参数式返回word,$param不变

${param:+word} 若$param为非空,则参数式返回word,$param不变

${param:=word} 若$param为空或为设置,则参数式返回word,同时$param设置为word

${param:?message} 若$param为空或为设置,则输出错误信息message,若包含空白符,则需引号

转载请注明:Huangdc » shell 变量替换与扩展

喜欢 (8)or分享 (0)
发表我的评论
取消评论

表情
(1)个小伙伴在吐槽
  1. Thanks for shgrnia. What a pleasure to read!
    匿名2017-05-20 17:30 回复