shell参数替换之##%%

     ${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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值