- ${abc:-word} : 如果abc的变量值为空或者为赋值,则会暂时返回word字符串为abc的值
用途: 如果变量未定义,则暂时使用word作为变量的值,防止变量值为空或者未定义而导致异常
示例:[root@localhost ~]# echo $abc <<变量值为空 [root@localhost ~]# echo ${abc:-yue} yue <<如果变量为空或者未赋值则暂时使用yue作为变量的值 [root@localhost ~]# abc=xiao <<给变量赋值xiao [root@localhost ~]# echo ${abc:-yue} xiao <<如果变量值不为空,则输出变量本身的值
注意:这里只生效一次,只是暂时代替,并不是给abc赋值为yue.
-
${abc:+word}: 如果abc的值为空或者未赋值,则什么都不做,否则word字符将会代替变量的值
示例:[root@localhost ~]# abc=yue [root@localhost ~]# echo ${abc:+xiao} xiao <<abc有值,所以这里用xiao来代替abc的值 [root@localhost ~]# unset abc <<清除abc的值 [root@localhost ~]# echo ${abc:+xiao} <<这里为空,因为abc没有值,所以什么都不做.
这里跟上上面的:-word整好相反,但也是暂时的,都不会改变abc本身的值
-
${abc:=word}: 如果abc的变量值为空或者未赋值,则设置这个变量的值为word,并返回其值.
用途: 基本上同${abc:-word},只是这里是赋值,并返回,
示例:[root@localhost ~]# echo $abc <<abc未赋值 [root@localhost ~]# echo ${abc:=yue} yue <<所以赋值为yue并输出 [root@localhost ~]# echo $abc yue <<abc的值为yue
这里是赋值并输出,并不是暂时代替的
-
${abc:?word}: 如果abc的值为空或者未赋值,那么word字符将作为标准错误输出,否则输出变量的值.
用途:用于捕捉由于变量未定义而导致的错误,并退出程序.
示例:[root@localhost ~]# echo $abc <<abc的值为空 [root@localhost ~]# echo ${abc:?faild} -bash: abc: faild <<所以就以faild作为标准错误输出,并退出. [root@localhost ~]# abc=yue [root@localhost ~]# echo ${abc:?faild} yue <<abc的值为yue,所以就正常输出值.
注意:以上所有的扩展变量,去掉冒号":"则表示每个定义中的"未赋值或空"改为"未赋值".冒号表示匹配空值
示例:[root@localhost ~]# a= <<给a赋值为空 [root@localhost ~]# echo ${a-b} <<这里没有冒号,所以表示只匹配未赋值, <<a以赋值为空,所以这里显示的是a的值(空) [root@localhost ~]# echo ${a:-b} <<这里有冒号,所以表示匹配未赋值或空 b <<a的值为空,所以这里正常输出b暂时代替a的值 [root@localhost ~]# unset a <<这里取消a的赋值 [root@localhost ~]# echo ${a-b} <<这里表示a未赋值则输出b b <<a未赋值,所以输出b [root@localhost ~]# echo ${a:-b} <<如果a未赋值或者为空则输出b b <<a未赋值,所以输出b
好好想想吧,这里确实有点绕.
shell特殊扩展变量
最新推荐文章于 2022-10-16 19:57:41 发布