shell脚本中${...}函数的用法总结
${...}在字符串中有非常多的用法:
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脚本中${...}函数的用法总结的更多相关文章
- Linux shell脚本中shift的用法说明【转】
本文转载自:http://blog.csdn.net/zhu_xun/article/details/24796235 Linux shell脚本中shift的用法说明 shift命令用于对参数的移动 ...
- Linux Shell脚本编程-函数
函数介绍 定义:把一段独立功能的的代码当做一个整体,并为之一个名字,命名的代码段,此即为函数: 功能:函数function是由若干条shell命令组成的语句块,实现代码重用和模块化编程. 注意: ...
- shell脚本的函数介绍和使用案例
#前言:今天我们来聊聊shell脚本中的函数知识,看一下函数的优势,执行过程和相关的使用案例,我们也来看一下shell和python的函数书写方式有什么不同 #简介 .函数也具有别名类似的功能 .函数 ...
- shell脚本中$
变量名只能包含数字.字母和下划线,因为某些包含其他字符的变量有特殊含义,这样的变量被称为特殊变量. 例如,$ 表示当前Shell进程的ID,即pid ./package/kernel/mac80211 ...
- shell脚本中case的用法
shell脚本中case选择语句可以结合read指令实现比较好的交互应答操作,case接收到read指令传入的一个或多个参数,然后case根据参数做选择操作. case的语法如下 case $char ...
- Shell脚本之八 函数
一.函数定义 Linux shell 可以用户定义函数,然后在shell脚本中可以随便调用. shell中函数的定义格式如下: [ function ] funname [()] { action; ...
- 【shell脚本】$ 在shell脚本中的使用
shell脚本中 '$' 与不同的符号搭配其表示的意义也会不同 特殊标志符 含义 $0 当前脚本的文件名 $n 传递给脚本或函数的参数.n 是一个数字,表示第几个参数. 例如,第一个参数是$1,第二个 ...
- Shell脚本(五)函数
总结下shell中的函数用法 #!/bin/bash function add_v1() { echo "call function add" } function add_v2( ...
- 批量杀掉多个pid文件中记录的pid进程, 并集成到shell脚本中
head_files=`find ./fmsConf/ -name "*.pid"` for file in $head_files do cat $file | awk rm - ...
随机推荐
- 宝塔面板liunx开启ssl域名后无法访问解决方法
不打开宝塔面板的ssl会不安全,打开了就会提示ssl证书不能使用的错误 如下所示: 您的连接不是私密连接 攻击者可能会试图从 你的ip 窃取您的信息(例如:密码.通讯内容或信用卡信息).了解详情 NE ...
- S02_CH02_MIO实验Enter a post title
S02_CH02_MIO实验 2.1 GPIO简介 Zynq7000系列芯片有54个MIO(multiuse I/O),它们分配在 GPIO 的Bank0 和Bank1隶属于PS部分,这些IO与PS直 ...
- Cactus CodeForces - 231E (无向图缩环)
大意: 给定无向图, 每个点最多属于一个简单环, 多组询问, 求给定起点终点, 有多少条简单路径. 先缩环, 然后假设两点树上路径经过$cnt$个环, 那么答案就为$2^{cnt}$. 要注意缩环建树 ...
- How does a browser know which response belongs to which request?
Today I knows that the server never send a request to a client! It just make response~ So,if the bro ...
- 轻松搭建CAS 5.x系列(1)-使用cas overlay搭建SSO SERVER服务端
概要说明 cas的服务端搭建有两种常用的方式: 1. 基于源码的基础上构建出来的 2. 使用WAR overlay的方式来安装 官方推荐使用第二种,配置管理方便,以后升级也容易.本文就是使用第 ...
- html中script标签使用async属性和defer属性的区别
相同点: 首先async和defer只对header里的外连脚本script标签上起作用,如果script标签是放在header外或者是header里的内置脚本以及动态生成的script标签是不起作用 ...
- 2、wepy安装后提示Cannot read property 'addDeps' 参考自https://www.cnblogs.com/yuanchaoyong/p/11614400.html
摘抄自https://www.cnblogs.com/yuanchaoyong/p/11614400.html wepy安装步骤 $ npm install @wepy/cli -g # 全局安装 W ...
- spark2.0 DataSet操作的一些问题记录
随着新版本的Spark已经逐渐稳定,最近拟将原有框架升级到spark 2.0.还是比较兴奋的,特别是SQL的速度真的快了许多.. 然而,在其中一个操作时却卡住了.主要是dataframe.map操作, ...
- 请求上下文HttpContext解释
1 HttpContext上下文作用 有关应用程序状态信息,处理的请求以及构建的响应等信息全部通过HttpContext上下文获取 2 Httpcontext类用于从头至尾跟踪请求的状态,他也是有关请 ...
- eclipse svn 插件离线安装后connector获取不到的问题解决
最近换了一家公司,写代码的电脑不给外网,所以各种麻烦的问题就来了,这里就说一下eclipse 安装SVN插件的一个小问题,虽说是小问题,但也折腾了我好几个小时,当然也可以不用这个插件,直接安装SVN客 ...