变量置换方式linux,Shell变量测试与内容置换

在脚本中,有时需要判断变量是否存在或是否被赋予了值,如果变量已经存在并且被赋予了值,则不改变变量;如果变量不存在或没有被赋值,则赋予其新值。这时我们就可以使用变量测试与内容置换。

我们在脚本中可以使用条件判断语句 if 来替代这种测试方法,不过使用 Shell 自带的变量置换更加方便,但是这种方法容易记混,我们通过表 1 来进行说明。

表 1 变量测试与内容置换

变量置换方式

变量y没有设置

变量y为空值

变量y设置值

x=${y-新值}

x= 新值

x 为空

x=$y

x=${y:-新值}

x= 新值

x= 新值

x=$y

x=${y+新值}

x 为空

x= 新值

x=新值

x=${y:+新值}

x 为空

x 为空

x=新值

x=${y=新值}

x= 新值

x 为空

x=$y

y= 新值

y 值不变

y值不变

x=${y:=新值}

x= 新值

X= 新值

x=$y

y= 新值

y= 新值

y值不变

x=${y?新值}

新值输出到标准错误输出(屏幕)

x 为空

x=$y

x=${y:?新值}

新值输出到标准错误输出

新值输出到标准错误输出

x=$y

如果大括号内没有":",则变量 y 为空或没有被设置,处理方法是不同的;如果大括号内有":",则变量 y 不论是为空,还是没有被设置,处理方法是一样的。

如果大括号内是"-"或"+",则在改变变量 x 的值的时候,变量 y 的值是不改变的;如果大括号内是"=",则在改变变量 x 的值的同时,变量 y 的值也会改变。

如果大括号内是"?",则当变量 y 不存在或为空时,会把"新值"当成报错输出到屏幕上。

【例 1】

[root@localhost ~]# unset y

#删除变量y

[root@localhost ~]# x=${y-new}

#进行测试

[root@localhost ~]# echo $x

new

#因为变量y不存在,所以x=new

[root@localhost ~]# echo $y

#变量y还是不存在的

和表 1 对比一下,是不是可以看懂了?这是变量 y 不存在的情况,如果变量 y 为空呢?

[root@localhost ~]#y=""

#给变量y赋值为空

[root@localhost ~]#x=${y-new}

#进行测试

[root@localhost ~]# echo $x

[root@localhost ~]# echo $y

#变量x和y都为空

如果变量y有值呢?

[root@localhost ~]#y=old

#给变量y赋值

[root@localhost ~]# x=${y-new}

#进行测试

[root@localhost ~]# echo $x

old

[root@localhost ~]# echo $y

old

#变量x和y的值都是old

【例2】

如果大括号内是"=",则又是什么情况呢?先测试一下变量 y 没有被设置的情况,如下:

[root@localhost ~]# unset y

#删除变量y

[root@localhost ~]# x=${y:=new}

#进行测试

[root@localhost ~]# echo $x

new

[root@localhost ~]# echo $y

new

#变量x和y的值都是new

一旦使用了"=",那么会同时处理变量 x 和 y,而不像例 1 那样只改变变量 x 的值。如果变量 y 为空,则又是什么情况呢?

[root@localhost ~]#y=""

#设定变量y为空

[root@localhost ~]#x=${y:=new}

#进行测试

[root@localhost ~]# echo $x

new

[root@localhost ~]# echo $y

new

#变量x和y的值都是new

一旦在大括号中使用":",那么变量 y 为空或者没有被设置,处理方法是一样的。如果变量 y 已经被赋值 了,则又是什么情况?

[root@localhost ~]# y=old

#给变量y赋值

[root@localhost ~]#x=${y:=new}

#进行测试

[root@localhost ~]# echo $x

old

[root@localhost ~]# echo $y

old

#变量x和y的值都是old

【例3】

再测试一下大括号中是"?"的情况。

[root@localhost ~]# unset y

#删除变量y

[root@localhost ~]#x=${y?new}

-bash: y: new

#会把值"new"输出到屏幕上

如果变量 y 已经被赋值了呢?

[root@localhost ~]# y=old

#给变量y赋值

[root@@localhost ~]# x=${y?new}

#进行测试

[root@localhost ~]# echo $x

old

[root@localhost ~]# echo $y

old

#变量x和y的值都是old

这些内容实在让人头疼啊,如果在脚本中用到了,则参考表 1 即可。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值