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 indexexpr 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 协议》,转载必须注明作者和本文链接
讨论数量: 0
(= ̄ω ̄=)··· 暂无内容!

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!