首页 > 代码库 > bash 参数替换中的模式匹配

bash 参数替换中的模式匹配

 参数替换中的模式匹配

 

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

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

例如

name=hello lhhs "root"

name=${name#‘"‘}; name=${name%‘"‘}

结果为root

################################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

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

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

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

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

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

38

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

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

41

42 echo

43

44 exit 0

bash 参数替换中的模式匹配