${...}在字符串中有非常多的用法:

1、${var}

限定变量。

如果一个变量名A是另一个变量名AB的前部分,那么,如果要在AB相连时,要得到A的值,就必须使用${var}限定。

如果变量名不会产生歧义时(即独立的变量名),${var}与$var没有任何区别。

var="hello"

var_01="hello01"

echo  $var $var_01 ${var}_01

>>> hello hello01 hello_01

2、${#var}

得到变量var的长度

var="hello"

echo ${#var}

>>> 5

3、${var#}

删除变量首部的字符(串),

"#"后面的可以是字面串,也可以是正则表达式(惰性匹配)。

var="hello"

echo ${var#he}

>>> llo

var="/res_pos/path/from/something"

echo ${var#/}

>>> res_pos/path/from/something    # 删除第一个"/"

echo ${var#/*/}

>>> path/from/something   # 删除首部匹配"/*/"的串,即"/res_pos/"

4、${var##}

删除变量首部的字符(串),

只是,当使用2个"##"时,匹配是贪婪的(贪婪匹配,也就是尽可能多的匹配)。

echo ${var##/*/}

>>> something  # 删除首部匹配"/*/"的串,即"/res_pos/path/from/"。

5、${var%}

删除变量尾部的字符(串),

"%"后面的可以是字面串,也可以是正则表达式(惰性匹配)。

var="hello"

echo ${var%llo}

>>> he

var="~/res_pos/path/from/something"

echo ${var%/*}

>>> ~/res_pos/path/from    # 删除尾部的"/something"

6、${var%%}

删除变量尾部的字符(串),

只是,当使用2个"%%"时,匹配是贪婪的(对应于第4条)

var="~/res_pos/path/from/something"

echo ${var%/*}

>>> ~    # 删除第一个的"/"后的所有所有内容(包括"/"),贪婪匹配中,"/*"就是"/"后的所有字符串

7、${var::}

跟python的切片概念相似,取变量var的起始索引,

指定长度的子串(${var:索引:长度})。

var="~/res_pos/path/from/something"

echo ${var:0:5}

>>> ~/res

echo ${var:1:5}

>>> /res_      # 可见,字符串的索引是从0开始的

echo ${var::5}

>>> ~/res      # 省略"索引",默认为从0开始

echo ${var:1:}

>>>               # 省略"长度",默认长度为0,所以输出为空

8、${var//}

字符串替换。

将var中的字符串A替换成字符串B(${var/A/B})。

var="hello world"

echo ${var/hello/hi}

>>> hi world      # 字符串"hello"替换成了"hi"

echo ${var/l/X}

>>> heXlo world  # 第一个"l"替换成了"X"

9、${var///}

字符串替换,

与第8点相同,只不过,现在是将所有出现的串A替换成串B(${var//A/B})。

var="hello world"

echo ${var//l/X}

>>> heXXo worXd  # 所有的"l"都替换成了"X"

10、${var/#/}

替换字符串首部的串A为串B,

(${var/#A/B}),与第8点不同的是,这里只替换首部的串A。

var="hello world. hello baby."

echo ${var//h/H}

>>> Hello world. Hello baby.    # 将所有"h"替换成了"H"

echo ${var/#h/H}

>>> Hello world. hello baby.    # 将首部的"h"替换成了"H"

echo ${var/e/E}

>>> hEllo world. hello baby.    # 将第一个出现的"e"替换成了"E"

echo ${var/#e/E}

>>> hello world. hello baby.    # 首字符不是"e",所以没有进行任何替换,原样输出。

11、${var/%/}

替换字符串尾部的串A为串B,

(${var/%A/B}),与第10点相似,只是这是处理的是字符串尾。

var="hello hello"

echo ${var/%o/END}

>>> hello hellEND    # 将尾部的字符"o",替换成了"END"。
————————————————
版权声明:本文为CSDN博主「李老客儿」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/lihonghai2392/article/details/77868445

shell脚本中${...}函数的用法总结的更多相关文章

  1. Linux shell脚本中shift的用法说明【转】

    本文转载自:http://blog.csdn.net/zhu_xun/article/details/24796235 Linux shell脚本中shift的用法说明 shift命令用于对参数的移动 ...

  2. Linux Shell脚本编程-函数

    函数介绍  定义:把一段独立功能的的代码当做一个整体,并为之一个名字,命名的代码段,此即为函数:  功能:函数function是由若干条shell命令组成的语句块,实现代码重用和模块化编程.  注意: ...

  3. shell脚本的函数介绍和使用案例

    #前言:今天我们来聊聊shell脚本中的函数知识,看一下函数的优势,执行过程和相关的使用案例,我们也来看一下shell和python的函数书写方式有什么不同 #简介 .函数也具有别名类似的功能 .函数 ...

  4. shell脚本中$

    变量名只能包含数字.字母和下划线,因为某些包含其他字符的变量有特殊含义,这样的变量被称为特殊变量. 例如,$ 表示当前Shell进程的ID,即pid ./package/kernel/mac80211 ...

  5. shell脚本中case的用法

    shell脚本中case选择语句可以结合read指令实现比较好的交互应答操作,case接收到read指令传入的一个或多个参数,然后case根据参数做选择操作. case的语法如下 case $char ...

  6. Shell脚本之八 函数

    一.函数定义 Linux shell 可以用户定义函数,然后在shell脚本中可以随便调用. shell中函数的定义格式如下: [ function ] funname [()] { action; ...

  7. 【shell脚本】$ 在shell脚本中的使用

    shell脚本中 '$' 与不同的符号搭配其表示的意义也会不同 特殊标志符 含义 $0 当前脚本的文件名 $n 传递给脚本或函数的参数.n 是一个数字,表示第几个参数. 例如,第一个参数是$1,第二个 ...

  8. Shell脚本(五)函数

    总结下shell中的函数用法 #!/bin/bash function add_v1() { echo "call function add" } function add_v2( ...

  9. 批量杀掉多个pid文件中记录的pid进程, 并集成到shell脚本中

    head_files=`find ./fmsConf/ -name "*.pid"` for file in $head_files do cat $file | awk rm - ...

随机推荐

  1. fiddler笔记:Find Session窗口

    通过Edit菜单选项或CTRL+F打开Find Session窗口.其主要是用来搜索捕捉到的请求和响应. find 指定要搜索的文本 Options Search 支持的搜索选项:Requests a ...

  2. scrapy 框架持久化存储的三个方法 存入 mysql 文件 redis

    这里就不做详细讲解了 毕竟不是一句两句能说的清楚,所以我把代码和注释放到了这里 谢谢! import pymysql from redis import Redis # 写入mysql class W ...

  3. 这里除了安全,什么都不会发生!Docker镜像P2P加速之路

    1.1      问题: 在使用Docker运行容器化应用时,宿主机通常先要从Registry服务(如Docker Hub)下载相应的镜像(image).这种镜像机制在开发环境中使用还是很有效的,团队 ...

  4. centos官网上对应的版本

    7.4版本的链接,版本可以返回前级目录跟换,下面是各个版本的区别: 1.CentOS-7-DVD版本:DVD是标准安装盘,一般下载这个就可以了. 2.CentOS-7-NetInstall版本:网络安 ...

  5. Inversion 多校签到题

    存下值和下标后排序,每次从坐后面开始取就可以了. ac代码: #include <algorithm> #include <cstdio> #include <cstri ...

  6. winfrom_关于打印小票

    1.使用的是PrintDocument控件,在工具箱  ,将其托到窗体上: 2. private void btnprint_Click(object sender, EventArgs e) { p ...

  7. C#异步编程中的最佳实践(做法)

    原文地址Stephen Cleary 写得很详细,尤其讲到了 GUI 上下文调用,在APS.NET中它会阻塞 GUI 线程,从而导致死锁.而控制台中却不存在这个问题. 比如开发过程中本地写控制台程序测 ...

  8. JavaScript-->基础类型和引用类型的区别

    先了解一下数组的基础知识:附代码(数组属于引用类型的对象) <!DOCTYPE html> <html lang="en"> <head> &l ...

  9. 开源跨境ERP - 小老板 Docker/Docker Compose一键部署

    先上部署成功后的截图,各个菜单点击均无报错 DockerCompose 包含: 1. 三个mysql5.7数据库 2. redis php会话存储+ memcached 3. 小老板php主程序 do ...

  10. ASE19团队项目alpha阶段model组 scrum7 记录

    本次会议于11月11日,19时整在微软北京西二号楼sky garden召开,持续15分钟. 与会人员:Jiyan He, Kun Yan, Lei Chai, Linfeng Qi, Xueqing ...