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

简介: 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)


相关文章
|
索引
Layui 内置方法 - layer.prompt_(输入层)
Layui 内置方法 - layer.prompt_(输入层)
1269 0
|
9月前
|
人工智能 运维 监控
从大规模恶意攻击 DeepSeek 事件看 AI 创新隐忧:安全可观测体系建设刻不容缓
唯有通过全行业的协同努力,加强整体、完善的网络安全可观测建设,才能为 AI 技术的创新和发展构建一个安全而稳固的环境。我们期盼并相信,在攻克这些网络安全难题之后,AI 创新将迎来更加安全、灿烂的未来。
|
JavaScript 算法 前端开发
layui框架实战案例(16):xm-select下拉多选插件实战记录(远程搜索、过滤、翻页、单选、提示文字)
layui框架实战案例(16):xm-select下拉多选插件实战记录(远程搜索、过滤、翻页、单选、提示文字)
3035 0
|
XML Android开发 数据格式
android中两个Activity同时设定了intent-filter的category为android.intent.category.LAUNCHER,会发生什么情况?
本文通过案例分析了在Android中当两个Activity都设置了`android.intent.category.LAUNCHER`类别时,会导致它们同时在应用启动器的"所有应用"页面显示为不同的启动入口。
425 2
android中两个Activity同时设定了intent-filter的category为android.intent.category.LAUNCHER,会发生什么情况?
|
Java 调度
Java实现定时启动,且只执行一次,如何实现?
【10月更文挑战第18天】Java实现定时启动,且只执行一次,如何实现?
908 3
|
Java API 数据安全/隐私保护
Spring Boot中的文件系统操作
Spring Boot中的文件系统操作
|
SQL 存储 Oracle
SQL中使用IF语句实现条件判断
SQL中使用IF语句实现条件判断
|
JavaScript 前端开发
layui下拉框xm-select自定义搜索使用方法
【10月更文挑战第28天】`xm - select` 是基于 Layui 的下拉框增强插件,支持自定义搜索功能。实现步骤包括:1. 引入 Layui 和 xm - select 的核心文件;2. 创建下拉框的基本 HTML 结构;3. 使用 `layui.use` 函数初始化插件并配置搜索功能;4. 可选地进行高级自定义搜索优化,如模糊匹配、多字段搜索和实时更新数据。通过这些步骤,可实现灵活的下拉框搜索功能。
3244 1
|
Web App开发 JavaScript 前端开发
解决Vue.js Devtools未检测到Vue实例的问题
解决Vue.js Devtools未检测到Vue实例的问题
1512 1