Shell 变量替换及测试
声明:$ 后面跟linux可执行命令
一、变量替换
| 语法 | 说明 |
| ${变量名#匹配规则} | 从变量的开头进行规则匹配,将符合最短的数据删除 |
| ${变量名##匹配规则} | 从变量的开头进行规则匹配,将符合最长的数据删除 |
| ${变量名%匹配规则} | 从变量的尾部进行规则匹配,将符合最短的数据删除 |
| ${变量名%%匹配规则} | 从变量的尾部进行规则匹配,将符合最长的数据删除 |
| ${变量名/旧字符串/新字符串} | 变量内容包含旧字符串,则第一个旧字符串被新字符串取代 |
| ${变量名//旧字符串/新字符串} | 变量内容包含旧字符串,则全部的旧字符串被新字符串取代 |
例1 :
定义变量:$ var_1="I love you, Do you love me"
输出变量:$ echo $var_1
打印结果:I love you, Do you love me

测试1:从头匹配最短删除
$ var_11=${var_1#*ove} // * 表示匹配任意字符
$ echo $var_11
打印结果:you, Do you love me // 注意开头的空格被去掉了。
测试2: 从头匹配最长删除(贪婪模式)
$ var_12=${var_1##*ove} // * 表示匹配任意字符
$ echo $var_12
打印结果:me // 注意开头的空格被去掉了。
测试3: 从后匹配最短删除
$ var_13=${var_1%ov*}
$ echo $var_13
打印结果:I love you, Do you l
测试4: 从后匹配最长删除(贪婪模式)
$ var_14=${var_1%%ov*}
$ echo $var_14
打印结果:I l // 大写的 i 和 小写的 L
测试5: 替换第一个旧字符串
$ var_15=${var_1/love/LOVE}
$ echo $var_15
打印结果:I LOVE you, Do you love me
测试6: 替换全部的旧字符串
$ var_16=${var_1//love/LOVE}
$ echo $var_16
打印结果:I LOVE you, Do you LOVE me
二、变量测试

变量测试不常用,实际编程中 if else 就可以取代变量测试。上面的 str没有配置 == str没有定义。expr是字符串,并不是变量。
举个例子:
对于 var=${str-expr} :如果 str 没有配置,则 var=expr; 如果 str="",则 var=""; 如果 str 定义了且不为空,则 var=$str
第一种情况:

第二种情况:

第三种情况:

忽有所思:有疑惑的地方还是需要去测试、去验证,否则这个问题在心里永远是一个谜。
Shell 变量替换及测试的更多相关文章
- 【Shell脚本学习9】Shell替换:Shell变量替换,命令替换,转义字符
如果表达式中包含特殊字符,Shell 将会进行替换.例如,在双引号中使用变量就是一种替换,转义字符也是一种替换. 举个例子: #!/bin/bash a=10 echo -e "Value ...
- Shell变量替换,命令替换,转义字符
如果表达式中包含特殊字符,Shell 将会进行替换.例如,在双引号中使用变量就是一种替换,转义字符也是一种替换. 举个例子: #!/bin/bash a=10 echo -e "Value ...
- Shell替换:Shell变量替换,命令替换,转义字符
如果表达式中包含特殊字符,Shell 将会进行替换.例如,在双引号中使用变量就是一种替换,转义字符也是一种替换. 举个例子: 复制纯文本复制 #!/bin/bash a=10 echo -e &quo ...
- [转]shell 变量替换
转自:http://blog.csdn.net/xuhongning/article/details/6191515 1,参数替换: 不含有“:”的,只要定义了,就生效,不管是否为空 含有“:”的,即 ...
- shell变量替换扩展 变量测试
- shell变量替换 SHELL字符串处理技巧(${}、##、%%)
在SHELL编程中,经常要处理一些字符串变量.比如,计算长度啊.截取子串啊.字符替换啊等等,常常要用到awk.expr.sed.tr等命令.下面给大家介绍个简单的字符串处理方法,用不着嵌套复杂的子 ...
- shell变量替换扩展 字符串计数截取
- Shell变量概述
目录 1. Shell变量概述 1.定义变量,变量名=变量值.不能出现"-横杠"命令 2.引用变量,$变量名 3.查看变量,set显示所有变量,包括自定义变量和环境变量 4.取消变 ...
- shell脚本之文件测试表达式
1.文件测试表达式的用法 我们在编程时处理一个对象时,需要对对象进行测试,只有符合要求的才采取操作处理:这样做的好处是避免程序出错以及无所畏的消耗系统资源,这个测试的对象可以是文件.字符串.数字等. ...
随机推荐
- Kube-DNS搭建(1.4版本)
目录贴:Kubernetes学习系列 1.介绍 之前介绍过DNS的搭建(基于Kubernetes集群部署skyDNS服务),但那个版本的DNS是随着Kubernetes1.2发布出来的,有点原始.本文 ...
- U-boot2010.06移植--阶段一
2011-02-24 23:14:57 我今天的移植将分如下3步.加上写记录文档,预计时间3小时. 一,不改变源码,完成编译. 二,修改源码,搭建一个U-boot的框架,完成编译. 三,修改源码,完成 ...
- 【酷】JS+CSS打造沿Y轴纵深运动的3D球体
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/stri ...
- K8S学习笔记之ETCD启动失败注意事项
最近搭建K8S集群遇到ETCD的报错,报错信息如下,一定要关闭防火墙.iptables和SELINUX,三个都要关闭!! Mar 26 20:39:24 k8s-m1 etcd[6437]: heal ...
- Python 堡垒机介绍
堡垒机说明 由于运维行业流动性很高,也为了防止有人在服务中残留后门,照成安全隐患,在这里我们使用堡垒机保证服务器管理安全. 我们知道运维人员在登陆服务时需要登陆用户,从客户端到服务端的过程中堡垒机,将 ...
- hadoop MR的一些文件归属(包括临时文件存储情况)
https://blog.csdn.net/bxyz1203/article/details/8057810
- 微信小程序实现部分双向数据绑定(为input、picker、textarea编写统一的更新数据逻辑)
wepy开发小程序 以input为例,微信小程序没有数据双向绑定,input要显示绑定的数据即value等于一个绑定的量 <input type="text" value=& ...
- Dockerfile文件详解
什么是dockerfile? Dockerfile是一个包含用于组合映像的命令的文本文档.可以使用在命令行中调用任何命令. Docker通过读取Dockerfile中的指令自动生成映像. docker ...
- 机器学习实战1-1 KNN电影分类遇到的问题
为什么电脑排版效果和手机排版效果不一样~ 目前只学习了python的基础语法,有些东西理解的不透彻,希望能一边看<机器学习实战>,一边加深对python的理解,所以写的内容很浅显,也许还会 ...
- spring 事务的七中传播行为五中隔离
事务的传播行为(七): public enum Propagation { REQUIRED(TransactionDefinition.PROPAGATION_REQUIRED), SUPPORTS ...