扩展变量
${parameter-default} -- 如果变量parameter没被声明, 那么就使用默认值.
${parameter:-default} -- 如果变量parameter没被设置, 那么就使用默认值.
$ echo ${username0} #前面没有申明和设置$username0变量,所以这里显示为空
$ echo ${username0-`whoami`} #变量没有被申明,就使用默认值,whoami命令的结果是b (b是当前用户名)
b
$ echo ${username0:-`whoami`} #变量没有被设置,就使用默认值
b
$ username0= # 申明并设置username0变量的值为空,即设置为空
$ echo ${username0-`whoami`} #使用变量本身的值,即空值
$ echo ${username0:-`whoami`} #使用默认值
b
$ username0=1 #申明并设置username0变量的值为1
$ echo ${username0-`whoami`} # 使用变量本身的值
1
$ echo ${username0:-`whoami`} # 使用变量本身的值
1
${parameter=default} -- 如果变量parameter没声明, 那么就把它的值设为default.
${parameter:=default} -- 如果变量parameter没设置, 那么就把它的值设为default.
# 没有申明和设置$username2变量
$ echo ${username2=`whoami`} #如果变量没有申请,就把它的值设置为默认值
b
$ echo ${username2:=`whoami`} #如果变量没有设置,就把它的值设置为默认值
b
$ username2= #申请并设置username2变量的值为空,即没有设置
$ echo ${username2=`whoami`} #变量已经申明,显示这个变量的值
$ echo ${username2:=`whoami`} #变量没有设置值,所以使用默认值
b
$ username2=tom
$ echo ${username2=`whoami`} #变量已经申明,显示变量的值
tom
$ echo ${username2:=`whoami`} #变量已经设置,显示变量的值
tom
${parameter+alt_value} -- 如果变量parameter被声明了, 那么就使用 alt_value, 否则就使用null字符串.
${parameter:+alt_value} -- 如果变量parameter被设置了, 那么就使用alt_value, 否则就使用null字符串.
# 没有申请和设置username3变量
$ echo ${username3+`whoami`} #变量没有申明,输出为空
$ echo ${username3:+`whoami`} #变量没有设置,输出为空
$ username3= #申明并设置变量为空
$ echo ${username3+`whoami`} #变量被申明,使用whoami的值
b
$ echo ${username3:+`whoami`} #变量没有被设置,输出为空
$ username3=cat #申明并设置变量的值
$ echo ${username3+`whoami`} #变量被申明,使用whoami的值
b
$ echo ${username3:+`whoami`} #变量被设置,使用whoami的值
b
${parameter?err_msg} -- 如果parameter已经被声明, 那么就使用设置的值, 否则打印err_msg错误消息.
${parameter:?err_msg} -- 如果parameter已经被设置, 那么就使用设置的值, 否则打印err_msg错误消息.
# 没有申明和设置var变量
$ echo ${var?"abcde"} #显示err_msg消息
bash: var: abcde
$ echo ${var:?"abcde"} #显示err_msg消息
bash: var: abcde
$ var= # 申明并设置空值
$ echo ${var?"abcde"} #使用空值
$ echo ${var:?"abcde"} #var的值为空值,所以显示err_msg消息
bash: var: abcde
$ var=12345
$ echo ${var?"abcde"} #使用设置的值
12345
$ echo ${var:?"abcde"} #使用设置的值
12345
$ ${var?}
bash: 12345: command not found