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.文件测试表达式的用法 我们在编程时处理一个对象时,需要对对象进行测试,只有符合要求的才采取操作处理:这样做的好处是避免程序出错以及无所畏的消耗系统资源,这个测试的对象可以是文件.字符串.数字等. ...
随机推荐
- springMVC学习之路2-文件上传
springMVC的上传文件方式一共有两种,下面听我简单介绍一下: 1.1 首先配置springAnnotation-servlet.xml,新增一个multipartResolver处理器,并定义默 ...
- MySQL查询命令_SELECT 子查询
首先创建一个table mysql> create table Total (id int AUTO_INCREMENT PRIMARY KEY,name char(20),stu_num in ...
- BIOS备忘录之IIC(touchpad)设备
简述BIOS中对IIC device的支持,以touchpad为例. 信息收集 收集平台的硬件信息: 1. IIC controller number(PCH一般包含多个controller,我们使用 ...
- springboot日志配置
默认情况下,spring boot使用的是LogBack日志系统.在spring-boot-starter-web和spring-boot-starter中都已经默认依赖了logging的工具包. 如 ...
- UVA11995 I Can Guess the Data Structure!
思路 简单题,用栈,队列,优先队列直接模拟即可 代码 #include <cstdio> #include <algorithm> #include <cstring&g ...
- Nginx教程--02.Nginx虚拟主机的配置
1.Nginx虚拟主机的配置 1.1 在conf目录下,使用命令 : vim nginx.conf 对上图解释: //全局区 worker _processes 1; //表示当前有1个工作的子进程, ...
- VIP系统
不同等级的VIP可以被_req调用,以实现分级控制 不同的VIP等级可以增加装备升级.强化成功的几率,掉率增加,VIP泡点等 VIP系统可以通过制作多功能Item.Creature及Gameobjec ...
- _rank
命令 ._add rank 1000 自定义等级 `level` 等级 `name`等级描述 `prefix` 前缀名称 `gossipText` 菜单显示 `meetValue` 达到值就升级 `r ...
- 【Core】.NET Core 部署( Docker + CentOS)
CentOS 下 Docker安装 使用脚本安装 Docker (1)安装docker sudo yum install docker (2)启动docker systemctl start do ...
- 安装Go插件遇到的问题及解决方法
1. 问题:在 Windows 平台下使用 go get 安装sqlite3 驱动时报错 The remote end hung up unexpectedly ? 原因及解决方法: 原因可能有两种: ...