${ } 引用变量的高级用法

简介: 1.1 删除开头或结尾的整段字符串格式:

1、字符串删除


1.1 删除开头或结尾的整段字符串

格式:

${变量#匹配规则}        //从头开始匹配,最短删除;
 ${变量##匹配规则}       //从头开始匹配,最长删除;
 ${变量%匹配规则}        //从尾开始匹配,最短删除;
 ${变量%%匹配规则}       //从尾开始匹配,最长删除;
复制代码


示例:

${i#*,}       //从左往右最短匹配,以第一个逗号为休止符,将这之间的所有字符都删除(包括第一个逗号)
 ${i##*,}     //从左往右最长匹配,以最后一个逗号为休止符,将这之间的所有字符都删除(包括最后第一个逗号)
 ${i%,*}      //从右往左最短匹配,以第一个逗号为休止符,将这之间的所有字符都删除(包括第一个逗号)
 ${i%%,*}     //从右往左最长匹配,以最后一个逗号为休止符,将这之间的所有字符都删除(包括最后一个逗号)
复制代码


演示1:

[root@yuji ~]# i="11,22,33,44"
 [root@yuji ~]# echo $i
 11,22,33,44
 [root@yuji ~]# echo ${i#*,}
 22,33,44
 [root@yuji ~]# echo ${i##*,}
 44
 [root@yuji ~]# echo ${i%,*}
 11,22,33
 [root@yuji ~]# echo ${i%%,*}
 11
复制代码


网络异常,图片无法展示
|


演示2:

[root@yuji ~]# name="the great gatsby"
 [root@yuji ~]# echo $name
 the great gatsby
 [root@yuji ~]# echo ${name#*a}
 t gatsby
 [root@yuji ~]# echo ${name##*a}
 tsby
 [root@yuji ~]# echo ${name%a*}
 the great g
 [root@yuji ~]# echo ${name%%a*}
 the gre
复制代码


网络异常,图片无法展示
|


1.2 删除中间的某个字符或单词

格式:

${变量/pattern/}        //删除第一次被pattern匹配到的字符或字符串
 ${变量//pattern/}       //删除所有被pattern匹配到的字符或字符串
 ${变量/#pattern/}       //删除开头被pattern匹配到的字符或字符串
 ${变量/%pattern/}       //删除结尾被pattern匹配到的字符或字符串
复制代码


示例:

${i/a/}         //删除第一次匹配到的a
 ${i//a/}        //删除所有的a
 ${i/#a/}        //删除开头的a(a必须是开头第一个字符才会被删除)
 ${i/%a/}        //删除结尾的a(a必须是结尾最后一个字符才会被删除)
复制代码


演示:

[root@yuji ~]# j="aa,bb,cc,bb,aa"
 [root@yuji ~]# echo $j
 aa,bb,cc,bb,aa
 [root@yuji ~]# echo ${j/bb/}      //删除第一次匹配到的bb
 aa,,cc,bb,aa
 [root@yuji ~]# echo ${j//bb/}     //删除所有bb
 aa,,cc,,aa
 [root@yuji ~]# echo ${j/#bb/}     //删除开头的bb,因为开头不是bb,所以不会生效
 aa,bb,cc,bb,aa
 [root@yuji ~]# echo ${j/#aa/}     //删除开头的aa
 ,bb,cc,bb,aa 
 [root@yuji ~]# echo ${j/%aa/}     //删除结尾的aa
 aa,bb,cc,bb,
复制代码


网络异常,图片无法展示
|


2、字符串替换

格式:

${变量/旧字符串/新字符串}     //替换变量内的旧字符串为新字符串,只替换第一次匹配到的
 ${变量//旧字符串/新字符串}    //替换变量内的旧字符串为新字符串,全部替换
 ${变量/%旧字符串/新字符串}    //替换变量内的旧字符串为新字符串,只替换结尾的
复制代码


示例:

${i/a/b}      //将第一个a替换成b
 ${i//a/b}     //将所有a替换成b
 ${i/#a/b}     //将开头的a替换成b(a必须是开头第一个字符才会被替换)
 ${i/%a/b}     //将结尾的a替换成b(a必须是结尾最后一个字符才会被替换)
复制代码


演示:

[root@yuji ~]# k="aa,bb,cc,aa"
 [root@yuji ~]# echo $k
 aa,bb,cc,aa
 [root@yuji ~]# echo ${k/aa/999}      //将第一个aa替换成999
 999,bb,cc,aa
 [root@yuji ~]# echo ${k//aa/999}     //将所有aa替换成999
 999,bb,cc,999
 [root@yuji ~]# echo ${k/%aa/999}     //将结尾的aa替换成999
 aa,bb,cc,999
复制代码


网络异常,图片无法展示
|


3、字符串切片

格式:

${#变量名}    //获取字符串长度
 #字符下标值(字符索引):
 字符串内,第一个字符的下标值为0,第二个字符的下标值为1,最后一个字符的下标值为字符串长度减1。
 ${变量名:开始的下标值:截取长度}      //截取字符串,字符的下标值(索引)从0开始
复制代码


示例:

i="abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789"
 字符串长度:${#i}                      //此时长度为62
 字符串内的字符下标值:0-61
 截取第一个字符:${i:0:1}  
 截取前三个字符:${i:0:3}
 截取最后一个字符:${i:61:1}
复制代码

字符串切片在之前的文章中有详细介绍,这里不再赘述。可以查看:

shell编程之循环语句 for (包看包会 如果不会 再看一遍) - 掘金 (juejin.cn)


相关文章
|
编译器 Python
python之局部变量和全局变量的定义,两者之间的区别和使用方法,global和nonlocal的定义和使用方法,可变与不可变类型的定义和示例
python之局部变量和全局变量的定义,两者之间的区别和使用方法,global和nonlocal的定义和使用方法,可变与不可变类型的定义和示例
149 0
|
编译器 Linux C语言
C++基础语法(命名空间,缺省,重载)
C++基础语法(命名空间,缺省,重载)
72 0
|
2月前
|
存储 前端开发 JavaScript
前端基础(十二)_函数高级、全局变量和局部变量、 预解析(变量提升)、函数返回值
本文介绍了JavaScript中作用域的概念,包括全局变量和局部变量的区别,预解析机制(变量提升),以及函数返回值的使用和类型。通过具体示例讲解了变量的作用域、函数的返回值、以及如何通过return关键字从函数中返回数据。
24 1
前端基础(十二)_函数高级、全局变量和局部变量、 预解析(变量提升)、函数返回值
|
3月前
|
Python
Python变量的作用域_参数类型_传递过程内存分析
理解Python中的变量作用域、参数类型和参数传递过程,对于编写高效和健壮的代码至关重要。正确的应用这些概念,有助于避免程序中的错误和内存泄漏。通过实践和经验积累,可以更好地理解Python的内存模型,并编写出更优质的代码。
35 2
|
5月前
|
存储 Java 程序员
Java入门——基本语法(注释、字面量、变量、使用变量的注意事项、关键字、标识符)
Java入门——基本语法(注释、字面量、变量、使用变量的注意事项、关键字、标识符)
40 2
|
4月前
|
存储 C语言
C语言中static关键字的作用与用法解析
C语言中static关键字的作用与用法解析
|
6月前
|
编译器 C++
【C++进阶】引用 & 函数提高
【C++进阶】引用 & 函数提高
|
6月前
|
Java 数据库连接 数据库
static关键字的用法和作用
static关键字的用法和作用
65 0
|
存储 程序员 API
python中lambda表达式与函数,函数传参、引用、作用范围、函数文档
python中lambda表达式与函数,函数传参、引用、作用范围、函数文档
142 0
|
存储 移动开发 数据安全/隐私保护
高级变量类型
Python 中数据类型可以分为 **数字型** 和 **非数字型**
下一篇
无影云桌面