声明:$ 后面跟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

  第一种情况:  

           

  第二种情况:

     

  第三种情况:

     

 

忽有所思:有疑惑的地方还是需要去测试、去验证,否则这个问题在心里永远是一个谜。