Shell变量测试与内容置换
我们在脚本中可以使用条件判断语句 if 来替代这种测试方法,不过使用 Shell 自带的变量置换更加方便,但是这种方法容易记混,我们通过表 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还是不存在的
[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
[root@localhost ~]#y=""
#设定变量y为空
[root@localhost ~]#x=${y:=new}
#进行测试
[root@localhost ~]# echo $x
new
[root@localhost ~]# echo $y
new
#变量x和y的值都是new
[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"输出到屏幕上
[root@localhost ~]# y=old
#给变量y赋值
[root@@localhost ~]# x=${y?new}
#进行测试
[root@localhost ~]# echo $x
old
[root@localhost ~]# echo $y
old
#变量x和y的值都是old
所有教程
- C语言入门
- C语言编译器
- C语言项目案例
- 数据结构
- C++
- STL
- C++11
- socket
- GCC
- GDB
- Makefile
- OpenCV
- Qt教程
- Unity 3D
- UE4
- 游戏引擎
- Python
- Python并发编程
- TensorFlow
- Django
- NumPy
- Linux
- Shell
- Java教程
- 设计模式
- Java Swing
- Servlet
- JSP教程
- Struts2
- Maven
- Spring
- Spring MVC
- Spring Boot
- Spring Cloud
- Hibernate
- Mybatis
- MySQL教程
- MySQL函数
- NoSQL
- Redis
- MongoDB
- HBase
- Go语言
- C#
- MATLAB
- JavaScript
- Bootstrap
- HTML
- CSS教程
- PHP
- 汇编语言
- TCP/IP
- vi命令
- Android教程
- 区块链
- Docker
- 大数据
- 云计算