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 协议》,转载必须注明作者和本文链接