一、变量替换
${varname:-word} 如果变量varname存在且非null,则返回其值,否则,返回word
${varname-word} 如果变量varname存在,则返回其值,否则,返回word
$ var= $ echo ${var:-"hello"} hello $ echo ${var-"hello"}
$ unset var $ echo ${var-"hello"} hello $
|
${varname:+word} 如果变量varname存在且非null,则返回word,否则,返回null
${varname+word} 如果变量varname存在,则返回word,否则,返回null
$ var= $ echo ${var:+"hello"}
$ echo ${var+"hello"} hello $ unset var $ echo ${var+"hello"}
$
|
${varname:=word} 如果变量varname存在且非null,则返回其值,否则,设置它为word,并返回word
${varname=word} 如果变量varname存在,则返回其值,否则,设置它为word,并返回word
$ var= $ echo ${var:="hello"} hello
$ echo ${var}
hello $ var= $ echo ${var="hello"}
$ echo ${var}
$ |
${varname:?word} 如果变量varname存在且非null,则返回其值,否则,显示varname:word,并退出当前的命令或脚本,省略word会出现默认的信息parameter null or not set。
${varname?word} 如果变量varname存在,则返回其值,否则,显示varname:word,并退出当前的命令或脚本,省略word会出现默认的信息parameter null or not set。
$ var= $ echo ${var:?"hello"} bash: var: hello $ echo ${var?"hello"}
$ unset var $ echo ${var?"hello"} bash: var: hello $
|
二、模式匹配运算
(注意:这里用的模式都是通配字符模式,而非正则表达式)
假设变量 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[@]}表示数组中元素的个数
阅读(1208) | 评论(0) | 转发(0) |