变量判断与设置
声明:以下内容引用自鸟哥私房菜
-符号:
[root@localhost test]# username=${username-root}
[root@localhost test]# echo $username
root
[root@localhost test]# username="ric"
[root@localhost test]# username=${username-peter}
[root@localhost test]# echo $username
ric
以上重点关注username=${username-root}这一行,这行中的-表示,当username变量不存在时,${username-root}返回的值是root,由于username不存在,所以最后username的值是root,在username=${username-peter}之前,我将username赋值为ric,由于username的值存在,所以最后username的值依然是ric。所以在${variable-str}中,-表示,当variable这个变量不存在时,整个表达式的值就是str,否则表达式的值是variable。注意,当变量variable是空字符串时依然表示变量是存在的。
[root@localhost test]# username=""
[root@localhost test]# echo $username
[root@localhost test]# echo ${username-root}
上面由于我已经将username设置为空字符串,所以${username-root}的值为空字符串,如果想当username的值为空字符串时,结果依然是root,可以使用下面的方法。
[root@localhost test]# echo ${username:-root}
root
/${variable:-str}在-符号前面加上:表示,当变量variable不存在或者为空字符串时,表达式的值是str,否则表达式的值是variable。
+符号:
+和-符号的作用是相反的,如下所示:
[root@localhost test]# username="ric"
[root@localhost test]# echo ${username+root}
root
[root@localhost test]# unset username
[root@localhost test]# echo ${username+root}
当username存在时,值为root,当username不存在时,值为username。如果想让username为空字符串时值依然为username,可以在+前面加一个:号。
[root@localhost test]# username=""
[root@localhost test]# echo ${username+root}
root
[root@localhost test]# echo ${username:+root}
=符号:
[root@localhost test]# unset username
[root@localhost test]# echo ${username=root}
root
[root@localhost test]# echo $username
root
[root@localhost test]# username="ric"
[root@localhost test]# echo ${username=root}
ric
[root@localhost test]# echo $username
ric
/${variable=str}表示,当variable不存在时variable赋值为str,且表达式的值是variable,也就是str。当variable存在时,表达式的值是variable,variable的值不变。如果想让variable为空字符串时,variable被赋值为str,表达式的值为variable(也就是str)。可以在=前面加上:。
?符号:
如果我希望当变量不存在时,提示我变量不存在,并输出到stderr。可以这样实现。
[root@localhost test]# unset username
[root@localhost test]# unset var
[root@localhost test]# var=${username?无此变量}
-bash: username: 无此变量
[root@localhost test]# username="ric"
[root@localhost test]# var=${username?无此变量}
[root@localhost test]# echo $var
Ric
var=${variable?expr}中?的作用表示,当variable不存在时将expr输出到stderr(错误提示)。当variable存在时${variable?expr}表达式的值是variable。如果想让当variable为空字符串时依然将expr输出到stderr,则可以在?前面加上:。
[root@localhost test]# username=""
[root@localhost test]# var=${username:?无此变量}
-bash: username: 无此变量
总结
可以将-,+,=,?四个符号的作用总结成如下的表格:
变量设定方式 |
str没有设定 |
str为空字符串 |
str已设定为非空字符串 |
---|---|---|---|
var=${str-expr} |
var=expr |
var=$str |
var=$str |
var=${str:-expr} |
var=expr |
var=expr |
var=$str |
var=${str+expr} |
var=$str |
var=expr |
var=expr |
var=${str:+expr} |
var=$str |
var=$str |
var=expr |
var=${str=expr} |
str=expr var=expr |
str 不变 var= |
str 不变 var=$str |
var=${str:=expr} |
str=expr var=expr |
str=expr var=expr |
str 不变 var=$str |
var=${str?expr} |
expr 输出至 stderr |
var=$str |
var=$str |
var=${str:?expr} |
expr 输出至 stderr |
expr 输出至 stderr |
var=$str |
- 使用Visual Studio 2015 开发ASP.NET MVC 5 项目部署到Mono/Jexus
- 关于把本地应用封装成windows app发布审核通不过的问题
- java并发编程学习:用 Semaphore (信号量)控制并发资源
- java并发编程学习: ThreadLocal使用及原理
- 使用Autofac IOC组织多项目应用程序
- 国内首个“人工智能与变革管理研究院”成立
- 解决WordPress缩略图插件timthumb不支持站外图片的问题
- 让 http 2来得更猛烈些吧
- SQL Server 2008基于策略的管理
- centos系统安装Python
- rpc框架之 thrift连接池实现
- .NET Core全新路线图
- jboss eap 6.2+ 版本中 加密datasource密码等敏感信息
- WordPress自定义栏目运用实例II:添加文章Meta标签(keywords /description)
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- CodeForces - 1102A(思维题)
- C++使用指针,动态数组,指针做参数需要注意的问题等总结
- POJ 1170 Shopping Offers非状态压缩做法
- HDU 4283 You Are the One
- C++cin,cout以及常见函数总结,cin,cout格式化控制
- 最简单,最明了,看了就会的VScode和C++的配置!(Visual Studio Code)
- C++字符串输入输出以及复合类型浅谈
- Codeforce 1155D Beautiful Array(DP)
- C++类型转换几种情况
- 疯子的算法总结(九) 图论中的矩阵应用 Part 1 POJ3613 Cow Relays
- 『数据库』你这些知识点都不会,你学个锤子SQL数据库!
- The Preliminary Contest for ICPC Asia Xuzhou 2019 徐州网络赛 XKC's basketball team
- The Preliminary Contest for ICPC Asia Xuzhou 2019 徐州网络赛 D Carneginon
- 地表最强的MySQL安装一键式安装,信不信你下完我就给你装好!附各种Mysql安装失败的解决办法(什么你安装失败了?快来看这个)
- The Preliminary Contest for ICPC Asia Xuzhou 2019 徐州网络赛 C Buy Watermelon