Chinaunix首页 | 论坛 | 博客
  • 博客访问: 779028
  • 博文数量: 231
  • 博客积分: 3217
  • 博客等级: 中校
  • 技术积分: 2053
  • 用 户 组: 普通用户
  • 注册时间: 2011-07-04 12:01
文章分类

全部博文(231)

文章存档

2015年(1)

2013年(10)

2012年(92)

2011年(128)

分类:

2011-08-23 17:25:49

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

阅读(1280) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~