声明:$ 后面跟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 变量替换及测试的更多相关文章

  1. 【Shell脚本学习9】Shell替换:Shell变量替换,命令替换,转义字符

    如果表达式中包含特殊字符,Shell 将会进行替换.例如,在双引号中使用变量就是一种替换,转义字符也是一种替换. 举个例子: #!/bin/bash a=10 echo -e "Value ...

  2. Shell变量替换,命令替换,转义字符

    如果表达式中包含特殊字符,Shell 将会进行替换.例如,在双引号中使用变量就是一种替换,转义字符也是一种替换. 举个例子: #!/bin/bash a=10 echo -e "Value ...

  3. Shell替换:Shell变量替换,命令替换,转义字符

    如果表达式中包含特殊字符,Shell 将会进行替换.例如,在双引号中使用变量就是一种替换,转义字符也是一种替换. 举个例子: 复制纯文本复制 #!/bin/bash a=10 echo -e &quo ...

  4. [转]shell 变量替换

    转自:http://blog.csdn.net/xuhongning/article/details/6191515 1,参数替换: 不含有“:”的,只要定义了,就生效,不管是否为空 含有“:”的,即 ...

  5. shell变量替换扩展 变量测试

  6. shell变量替换 SHELL字符串处理技巧(${}、##、%%)

      在SHELL编程中,经常要处理一些字符串变量.比如,计算长度啊.截取子串啊.字符替换啊等等,常常要用到awk.expr.sed.tr等命令.下面给大家介绍个简单的字符串处理方法,用不着嵌套复杂的子 ...

  7. shell变量替换扩展 字符串计数截取

  8. Shell变量概述

    目录 1. Shell变量概述 1.定义变量,变量名=变量值.不能出现"-横杠"命令 2.引用变量,$变量名 3.查看变量,set显示所有变量,包括自定义变量和环境变量 4.取消变 ...

  9. shell脚本之文件测试表达式

    1.文件测试表达式的用法 我们在编程时处理一个对象时,需要对对象进行测试,只有符合要求的才采取操作处理:这样做的好处是避免程序出错以及无所畏的消耗系统资源,这个测试的对象可以是文件.字符串.数字等. ...

随机推荐

  1. CSS——对height和line-height的理解

    最近在做CSS界面时经常遇到line-height和height这两个属性,一直没搞很明白,今天静下心来好好网上查阅了一下,算是有所领悟.https://blog.csdn.net/a20131263 ...

  2. 《CSS世界》读书笔记(六)

    <!-- <CSS世界> 张鑫旭著 --> min-width/max-width和min-height/max-height min-width/max-width出现的场景 ...

  3. java限制map大小,并FIFO淘汰

    有时候需要往一个MAP中写入一些记录,但又怕无限制地写入会导致内存爆掉,所以得限制这个MAP的大小. 实现:LinkedHashMap提供了简单的方法. 首先,定义一个最大数,比如1000,然后new ...

  4. index read-only

    系统重启后,Eleastisearch6.5.0在给 Eleastisearch 更新索引的时候报了一个错误:ClusterBlockException[blocked by: [FORBIDDEN/ ...

  5. vector和list

    vector vector与数组类似,拥有一段连续的内存空间,并且起始地址不变.便于随机访问,时间复杂度为O(1),但因为内存空间是连续的,所以在进入插入和删除操作时,会造成内存块的拷贝,时间复杂度为 ...

  6. windows升级node

    之前用的node版本太低,不兼容webpack4.x,需要升级,网上搜索了许多方法,发现在windows下行不通 找到的教程都说全局安装node下的一个名为n的模块,这个模块是node专门用于版本管理 ...

  7. Learning-Python【19】:Python常用模块(2)—— os、sys、shutil

    os模块:与操作系统相关的模块 import os # 获取当前的工作目录 print(os.getcwd()) # 切换工作目录 os.chdir(r'E:\Python\test') print( ...

  8. 关于ComponentOne For WinForm 的全新控件 – DataFilter数据切片器(Beta)

    概述 数据切片器在电子商务网站上很常见 - 它们可以帮助用户快速过滤所选商品,并且所有过滤选项都可以在一个地方使用,通常包含核心控件类型为:清单,范围栏和单选按钮等.在ComponentOne For ...

  9. Jquery实现简单选项卡

    <html> <head> <meta charset="UTF-8"> <title>选项卡</title> < ...

  10. Spring中ClassPathXmlApplication与FileSystemXmlApplicationContext的区别

    Spring中ClassPathXmlApplication与FileSystemXmlApplicationContext的区别 一.概述 在项目中遇到加载不到Spring配置文件,简单分析后,写此 ...