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.文件测试表达式的用法 我们在编程时处理一个对象时,需要对对象进行测试,只有符合要求的才采取操作处理:这样做的好处是避免程序出错以及无所畏的消耗系统资源,这个测试的对象可以是文件.字符串.数字等. ...
随机推荐
- Javascript 面向对象编程2:构造函数的继承
这个系列的第一部分,主要介绍了如何"封装"数据和方法,以及如何从原型对象生成实例.对象之间的"继承"的五种方法.比如,现在有一个"动物"对象 ...
- 判断(if)语句
目标 开发中的应用场景 if语句体验 if语句进阶 综合应用 一 开发中的应用场景 转换成代码 判断的定义 如果 条件满足,才能做某件事 如果 条件不满足,就做另外一件事,或者什么也不做 判断语句 又 ...
- Node.js基础学习一之Get请求
本人从事的是前端开发,这段时间公司开发项目比较少所以就想着学点东西,然后就想到了Node.js ,跟着菜鸟教程学了点,不过我觉得最好的学习方法是带着需求来学习. 其实和服务端打交道无非就是能有一个可以 ...
- FL Studio的模式剪辑是什么?
FL Studio里的模式剪辑功能里,有一个模式菜单.模式剪辑菜单和模式选择器面板.模式可以作为模式剪辑放置在播放列表中,模式剪辑的名称显示在剪辑的标题栏中.(注意:模式注释和事件自动化可以共享相同的 ...
- gcc、make编译
一 arm-linux-gcc 常用参数 https://www.cnblogs.com/zhangpengshou/p/3587751.html 二 arm-linux-objdump常用参数 ht ...
- CSS: hover选择器的使用
用法1:这个表示的是:当鼠标悬浮在a这个样式上的时候,a的背景颜色设置为黄色 a:hover { background-color:yellow; ...
- LINQ解析
Linq 是什么? Linq是Language Integrated Query的缩写,即“语言集成查询“的意思,Linq的提出就是为了提供一种跨各种数据源统一查询方式,主要包含四种组件:Linq t ...
- Cocos Creator 使用protobufjs
Win7 + Creator 2.0.0 + protobufjs 6.8.8 1.下载安装protobufjs npm install -g protobufjs 可以看到protobufjs安装在 ...
- Appium Desktop-Permission to start activity denied.
可能情况1:activity查找错误 如何查找activity (1)确保手机和电脑已连接 adb devices (2)确保在你手机上,要测试的包启动着 (3)dos运行:adb shell d ...
- rocketmq ----> 学习笔记
官网:http://rocketmq.apache.org 1.环境搭建 准备: rocketmq-all-4.3.0-bin-release.zip 必须配置:JAVA_HOME=/home/rui ...