Shell-变量高级用法 
                                                    
                        
                    
                    
  
                    
                    变量替换和测试
变量替换
| 语法 | 说明 | 
|---|---|
| ${变量名#匹配规则}} | 从变量开头进行规则匹配,将符合最短的数据删除 | 
| ${变量名##匹配规则}} | 从变量开头进行规则匹配,将符合最长的数据删除 | 
| ${变量名%匹配规则}} | 从变量尾部进行规则匹配,将符合最短的数据删除 | 
| ${变量名%%匹配规则}} | 从变量尾部进行规则匹配,将符合最长的数据删除 | 
| ${变量名/旧字符串/新字符串}} | 变量内容符合旧字符串,则第一个旧字符串会被新字符串取代 | 
| ${变量名//旧字符串/新字符串}} | 变量内容符合旧字符串,则全部的旧字符串会被新字符串取代 | 
[wonbin@localhost ~]$ variable_1="I love you,Do you love me"
[wonbin@localhost ~]$ echo $variable_1
I love you,Do you love me
[wonbin@localhost ~]$ var1=${variable_1#*ov}  // 从头开始,最短匹配
[wonbin@localhost ~]$ echo $var1 
e you,Do you love me
[wonbin@localhost ~]$ echo ${variable_1##*ov}  // 从头开始,最长匹配
e me
[wonbin@localhost ~]$ echo ${variable_1%ov*}  // 从尾部开始,最短匹配
I love you,Do you l
[wonbin@localhost ~]$ echo ${variable_1%%ov*}  // 从尾部开始,最长匹配
I l
wonbin@localhost ~]$ echo $PATH
/usr/local/php/bin:/usr/local/nginx/sbin:/usr/local/mysql/bin:/usr/local/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/usr/local/go/bin:/usr/local/go/bin:/home/wonbin/.local/bin:/home/wonbin/bin:/home/wonbin/.config/composer/vendor/bin
[wonbin@localhost ~]$ echo ${PATH/bin/BIN}    // 单个替换
/usr/local/php/BIN:/usr/local/nginx/sbin:/usr/local/mysql/bin:/usr/local/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/usr/local/go/bin:/usr/local/go/bin:/home/wonbin/.local/bin:/home/wonbin/bin:/home/wonbin/.config/composer/vendor/bin
[wonbin@localhost ~]$ echo ${PATH//bin/BIN}   // 全部替换
/usr/local/php/BIN:/usr/local/nginx/sBIN:/usr/local/mysql/BIN:/usr/local/BIN:/usr/BIN:/usr/local/sBIN:/usr/sBIN:/usr/local/go/BIN:/usr/local/go/BIN:/home/wonBIN/.local/BIN:/home/wonBIN/BIN:/home/wonBIN/.config/composer/vendor/BIN
变量测试
| 变量配置方式 | str没有配置 | str为空字符串 | str 已配置且非空 | 
|---|---|---|---|
| var=${str-expr} | var=expr | var= | var=$str | 
字符串处理
计算字符串长度
| 语法 | 说明 | |
|---|---|---|
| 方法一 | ${#string} | 无 | 
| 方法二 | expr length "$string" | string如有空格,则必须加双引号 | 
[wonbin@localhost ~]$ echo ${#var_str}
11
[wonbin@localhost ~]$ echo `expr length "$var_str"`
11获取子串在字符串中索引的位置
| 语法 | 说明 | 
|---|---|
| expr index $string $substring | 查找子串中任一出现的字符,找到第一个出现字符的位置就返回 | 
查找字符 u 或 x 的位置(哪个字母先出现就计算哪个):
[wonbin@localhost ~]$ string="everything is just beginning"
[wonbin@localhost ~]$ echo `expr index "$string" ux`
16计算子串长度
| 语法 | 说明 | 
|---|---|
| expr match $string $substring | 字符串左边从头开始匹配, | 
[wonbin@localhost ~]$ string="did you do exercise today ?"
[wonbin@localhost ~]$ echo `expr match "$string" do`
0
[wonbin@localhost ~]$ echo `expr match "$string" "did you"`
7
[wonbin@localhost ~]$ echo `expr match "$string" did.*`
27注意:expr index 和 expr match  实际中用的并不是很多
提取字符串
| 语法 | 说明 | |
|---|---|---|
| 方法一 | ${string:position} | 从 string 中的 position 位置开始,索引下标从 0 开始 | 
| 方法二 | ${string:position:length} | 从 position 开始,匹配长度为 length | 
| 方法三 | ${string: -position} | 从右边开始匹配, 注意冒号后面的空格 | 
| 方法四 | ${string:(position} | 从左边开始匹配 | 
| 方法五 | expr substr $string $position $length | 从position开始,匹配长度为length,索引下标从1 开始 | 
[wonbin@localhost ~]$ var_str="kubernetes docker cloudNative  promethus"[wonbin@localhost ~]$ echo ${var_str: 3}
ernetes docker cloudNative promethus
[wonbin@localhost ~]$ echo ${var_str:3:5}  // 方法二, 开始位置3, 长度5
ernet
[wonbin@localhost ~]$ echo ${var_str: -5}  // 方法三,冒号后必须加空格
ethus
[wonbin@localhost ~]$ echo ${var_str: -5:3}  // 方法三, 带长度
eth
[wonbin@localhost ~]$ echo ${var_str:-5}   // 方法三,冒号后不加空格无效
kubernetes docker cloudNative promethus
[wonbin@localhost ~]$ echo ${var_str:(-5)}  // 方法四,冒号后不加空格的话,可以使用括号
ethus
[wonbin@localhost ~]$ echo `expr substr "$var_str" 1 5`   // 方法五, 索引从开始1计数
kuber本作品采用《CC 协议》,转载必须注明作者和本文链接
 
           wonbin 的个人博客
 wonbin 的个人博客
         
             
             
           
           关于 LearnKu
                关于 LearnKu
               
                     
                     
                     粤公网安备 44030502004330号
 粤公网安备 44030502004330号 
 
推荐文章: