${var#Pattern}, ${var##Pattern}

从$var 开头删除最近或最远匹配$Pattern 的子串.

来自 Example A-7 例子的一部分.

1 # 来自"days-between.sh"例子的一个函数.

2 # 去掉传递进来的参数开头的 0.

3

4 strip_leading_zero () # 去掉开头的 0

5{ #+ 从传递进来的参数中.

6 return=${1#0} # "1"指的是"$1" -- 传进来的参数.

7} # "0"就是我们想从"$1"中删除的子串.

下边是 Manfred Schwarb's 对上边函数的一个改版.

1 strip_leading_zero2 () # 去掉开头的 0,因为如果不去掉的话

# Bash 将会把这个值作为 8 进制解释.

2{

# 打开扩展 globbing.

3 shopt -s extglob

4 local val=${1##+(0)} # 使用局部变量,匹配最长的连续的 0.

# 打开扩展 globbing.

5 shopt -u extglob

6 _strip_leading_zero2=${val:-0}

7 # 如果输入为 0,那么返回 0 来代替"".

8}

另一个例子

1 echo `basename $PWD` # 当前工作目录的 basename.

2 echo "${PWD##*/}" # 当前工作目录的 basename.

3 echo

4 echo `basename $0` # 脚本名字.

5 echo $0 # 脚本名字.

6 echo "${0##*/}" # 脚本名字.

7 echo

8 filename=test.data

9 echo "${filename##*.}" # data

${var%Pattern}, ${var%%Pattern}

从$var 结尾删除最近或最远匹配$Pattern 的子串.

Bash version2 添加了额外的选项.

Example 9-17 参数替换中的模式匹配

################################Start

Script#######################################

1 #!/bin/bash

2 # patt-matching.sh

3

4 # 使用# ## % %%来进行参数替换操作的模式匹配.

5

6 var1=abcd12345abc6789

7 pattern1=a*c # * (通配符) 匹配 a - c 之间的任何字符.

8

9 echo

10 echo "var1 = $var1" # abcd12345abc6789

11 echo "var1 = ${var1}" # abcd12345abc6789

12 # (alternate form)

13 echo "Number of characters in ${var1} = ${#var1}"

14 echo

15

16 echo "pattern1 = $pattern1" # a*c (everything between 'a' and 'c')

17 echo "--------------"

18 echo '${var1#$pattern1} =' "${var1#$pattern1}" # d12345abc6789

19 # 最短的可能匹配, 去掉 abcd12345abc6789 的前 3 个字符

20 # |-| ^^^

21 echo '${var1##$pattern1} =' "${var1##$pattern1}" # 6789

22 # 最远的匹配,去掉 abcd12345abc6789 的前 12 个字符.

23 # |----------| ^^^^

24

25 echo; echo; echo

26

27 pattern2=b*9 # 'b' 到'9'之间的任何字符

28 echo "var1 = $var1" # 还是 abcd12345abc6789

29 echo

30 echo "pattern2 = $pattern2"

31 echo "--------------"

32 echo '${var1%pattern2} =' "${var1%$pattern2}" # abcd12345a

# 最近的匹配, 去掉 abcd12345abc6789 的最后 6 个字符

33

34 # |----| ^^^^

35 echo '${var1%%pattern2} =' "${var1%%$pattern2}" # a

36 # 最远匹配, 去掉 abcd12345abc6789 的最后 12 个字符

37 # |-------------| ^^^^^^

38

39 # 记住, # 和## 从字符串的左边开始,并且去掉左边的字符串,

40 # % 和 %% 从字符串的右边开始,并且去掉右边的子串.

41

42 echo

43

44 exit 0

shell参数替换之##%%相关推荐

  1. shell 中的参数替换

    今天碰到个shell script看了下,发现参数替换是在不懂,google了下,把笔记总结如下:  可替换的参数:处理或/并扩展变量 ${parameter} 和$parameter是相同的,都是表 ...

  2. Hive基本操作,DDL操作(创建表,修改表,显示命令),DML操作(Load Insert Select),Hive Join,Hive Shell参数(内置运算符、内置函数)等

    1.  Hive基本操作 1.1DDL操作 1.1.1    创建表 建表语法 CREATE [EXTERNAL] TABLE [IF NOT EXISTS] table_name [(col_nam ...

  3. shell正则表达式截取字符串_从CVE20208816聊聊shell参数扩展

    1.前言 最近偶然看到了Pi-hole <=4.3.2远程代码执行漏洞(CVE-2020-8816)相关的文章,漏洞成因不是很难,但是里面构造的Exp引起了我的兴趣.由于Pi-hole代码对命令 ...

  4. shell脚本系列:5、shell参数

    shell脚本系列:5.shell参数 文章目录 shell脚本系列:5.shell参数 1. 位置参数 2. 特殊参数 2.1 参数* 2.2 参数@ 2.3 参数# 2.4 参数? 2.5 参数- ...

  5. linux shell 字符串替换字符,关于bash:在shell脚本中替换另一个字符串的一个子字符串...

    我有"我爱苏西并结婚",我想把"苏西"改成"萨拉". #!/bin/bash firstString="I love Suzi a ...

  6. Shell_参数替换(転)

    From: http://www.cnblogs.com/yjf512/archive/2013/06/03/3114803.html Bash中的$符号的作用是参数替换,将参数名替换为参数所代表的值 ...

  7. shell(bash)替换字符串大全

    shell(bash)替换字符串大全 1. 替换(只替换一个) 用varrB=${varA/str1/str2} $ var="AAAszip_BBB.zip";var2=${va ...

  8. shell参数带有空格问题

    有shell脚本readFile.shell,它的作用是接收一个文件名称,然后打印出文件的文本内容. #!/bin/bash#打印入参 echo ${1}#打印文本内容 cat `/home/hds/ ...

  9. excel模板中参数替换

    1.准备好Excel模板如图 2.代码实现参数替换 主要代码 private static void generatePaymentNoticeSheet( final XSSFWorkbook wo ...

最新文章

  1. python跨文件全局变量_Python 进程之间共享数据(全局变量)的方法
  2. 【elementUI】el-tree搜索时加载子节点对应父节点、父节点对应子节点树
  3. esp32-cam的原理图
  4. Linux内核的同步机制---自旋锁
  5. 安装rime中文输入法
  6. 对象文件格式分析工具: objdump, nm,ar
  7. 提升数据分析能力成熟度之四步曲_数据分析师
  8. php psockopen,基于php socket(fsockopen)的应用实例分析
  9. 3.4.1 - Numeric Types
  10. ceres-solver库使用示例
  11. 面试题之求二叉树的深度
  12. 生成n*n蛇形矩阵的算法
  13. 流模型 操作 xml
  14. Verilog 任意分频器设计
  15. 基于Ip的刷投票排名及刷百度推广的自动化实现
  16. 文华财经多个非常实用的期货指标公式,文华财经支撑压力自动画线公式
  17. 如何在InfoPath2007中接受URL参数
  18. 【django】class='btn' btn按钮样式
  19. OpenCV (c++)使用KDTree时,得到正确结果后报Segmentation fault (core dumped)
  20. java multi tenancy_MybatisPlus 多租户架构(Multi-tenancy)实现详解

热门文章

  1. 企业员工培训管理系统(JAVA,JSP,SQLSERVER,SSH)
  2. 单例模式你会几种写法?
  3. 机器学习作业2编程作业(python):Logistic Regression
  4. 传智博客学习笔记8--面向对象下
  5. 判断日期是月末java_判断一个日期是否为月末 | 学步园
  6. 如果由你来设计 12306.cn,你会怎么设计?
  7. File类以及文件过滤器
  8. 【百度前端学院学习笔记】Day6 浮动/BFC
  9. fck java_java FCK学习使用
  10. 梳子刻字刻什么好_校园石阶上被刻了1700多个汉字,这次网友却说好