bash 引數替換中的模式匹配

weixin_30639719發表於2020-04-05

 引數替換中的模式匹配

 

 # 和## 從字串的左邊開始,並且去掉左邊的字串,

 % 和 %% 從字串的右邊開始,並且去掉右邊的子串.

例如

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

轉載於:https://www.cnblogs.com/fastwave2004/p/4149868.html

相關文章