shell特殊扩展变量

  1. ${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.

  2. ${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本身的值

  3. ${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
    

    这里是赋值并输出,并不是暂时代替的

  4. ${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
    

    好好想想吧,这里确实有点绕.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值