{var:-default_value}
当var 不存在,或者值为空时,返回default_value
name不存在,返回了一个默认值,但是name并没有改变, 后续不可访问
$ set -u # 打开访问不存在的对象将报错, set +u关闭
$ unset name # 删除name
$ echo $name
-bash: name: unbound variable
$ echo ${name:-zhangsan}
zhangsan
$ echo $name
-bash: name: unbound variable
$
name为空值,返回了一个默认值,但是name并没有改变, 后续不可访问
$ name="" # 创建name,并设置空值
$ echo $name
$ echo ${name:-lisi}
lisi
$ echo $name
$
name有值,什么都没变
$ name="wangwu"
$ echo ${name:-libai}
wangwu
$ echo $name
wangwu
$
{var:=default_value}
当var 不存在,或者值为空时,返回defaultvalue, 并且对var赋值default_value
后续可以对var进行访问,*不能对位置参数进行使用(比如$1,$2…, $等)
name不存在, 创建name,并且赋值default_value, 后续可访问
$ set -u
$ unset name # 删除name
$ echo $name
-bash: name: unbound variable
$ echo ${name:=zhangsan}
zhangsan
$ echo $name
zhangsan # 已经创建,并且赋值,后续可以访问
name存在但是值为空,赋值default_value, 后续可访问
$ name=""
$ echo $name
$ echo ${name:=lisi}
lisi
$ echo $name
lisi
name存在且有值,不替换
$ echo $name
lisi
$ echo ${name:=wangwu}
lisi
$ echo $name
lisi
对位置参数进行操作,将报错
#!/usr/bin/env bash
# 文件名: default1.sh
echo ${1:=hello}
$ bash default1.sh
$1: cannot assign in this way
{var=default_value}
当var 不存在,则返回default_value,并且对var赋值default_value
当空值也是合法的时候,则使用这个。
name不存在时,创建并赋值,后续可访问
$ set -u
$ unset name
$ echo $name
-bash: name: unbound variable
$ echo ${name=xiaowang}
xiaowang
$ echo $name
xiaowang
name存在,且不为空,不替换
$ echo $name
xiaowang
$ echo ${name=lisi}
xiaowang
$ echo $name
xiaowang
当name存在,值为空时,不替换
$ name=""
$ echo $name
$ echo ${name=wangsi}
$ echo name
{var:+value}
当var 不存在,或者值为空时,不返回信息,只有var有值时,才返回value
可用于拼接字符串
name不存在,不返回值
$ set -u
$ unset name
$ echo $name
-bash: name: unbound variable
$ echo ${name:+zhangsan}
$ echo $name
-bash: name: unbound variable
name存在,但是值为空,不返回值
$ name=""
$ echo $name
$ echo ${name:+zhangsan}
$ echo $name
name存在且有值,返回, 不改变name
$ name="lisi"
$ echo $name
lisi
$ echo ${name:+,zhangsan}
,zhangsan
$ echo $name
lisi
比如将文件内容合并为一行,并且用逗号分隔
$ cat 1.txt
$ while read LINE;do content=${content}${content:+,}$LINE;done<1.txt
$ echo $content
1,2,3,4,5
${pos:?errmsg}
对位置参数的判断,当位置参数不存在或者为空时,输出错误信息并退出
#!/usr/bin/env bash
# 文件名: default2.sh
param1=${1:?"参数错误,必须有一个参数,并且不为空"}
echo 第一个参数是:$param1
$ chmod +x default2.sh
$ ./default2.sh
./default2.sh: line 4: 1: 参数错误,必须有一个参数,并且不为空
$ ./default2.sh ""
/default2.sh: line 4: 1: 参数错误,必须有一个参数,并且不为空
$ ./default2.sh "hello world"
第一个参数是:hello world