浅谈 Bash3.x 的正规表示式(regular expression)――BASH_REMATCH

         在 bash2.0x 时代,如果要使用正规表示式,非得借助于 sed,awk,grep,egrep,ed.....等外部程式,但随着 3.0 发行,很多 linux 发型版也换上了 bash 3.0,FC3,FC4 ....等的 bash 都是 3.0 版,在这个版本中,加入了许多新特性,但用途最广泛可能是正规表示式的支援。
        bash 3.0  在 [[  ]]   这个运算子加入 egrep  形式的 regexp ,再给三个运算符  ==,!=,  =~
        ==  是等如
        !=   不等如
        =~  match  ,符合(这个等如上面的加在一起)
       
       还有一个新的变量,BASH_REMATCH,这个变量用来存放那些 match 的字符,它是一个数组(array),以数字作为下标,由 0 开始
        如 bash  的数组 表示式在 [[  ]]  的运算符的后边配对。
 
      例
         #!/bin/bash
         # is this a string? 
            word=$1 
            if [ $# -eq 0 ] ; then
                 exit 
           fi 
          [[ "$word" =~ '\<[A-Za-z]+\>' ]] && echo 'String.' || echo 'Others.' 

         [victor@localhost ~]$ sh temp.sh string
         String.
         [victor@localhost ~]$ sh temp.sh 111
         Others.
        
        下面 加入 BASH_REMATCH 
 
      例
         #!/bin/bash
         # is this a string?
            word=$1
            if [ $# -eq 0 ] ; then
               exit
           fi
           [[ "$word" =~ '\<[A-Za-z]+\>' ]] && echo 'String.' || echo 'Others.'
          : ${BASH_REMATCH:?"no match"}
            echo "Match: $BASH_REMATCH" 

            victor@localhost ~]$ sh temp.sh 111 
          Others. 
          temp.sh: line 8: BASH_REMATCH: no match
          [victor@localhost ~]$ sh temp.sh who 
          String.
          Match: who 
          [victor@localhost ~]$
 
    这可看到 BASH_REMATCH  的工作方式了,当 $word  这个变量符合 '\<[A-Za-z]\>'  这个表示式,它便把那个 who  放进 BASH_REMATCH  中,不符的便不存进

 

你可能感兴趣的:(变量,bash,详解,3.0,BASH_REMATCH)