shell引數替換之

2021-06-16 21:31:30 字數 2260 閱讀 8582

$, $

從$var 開頭刪除最近或最遠匹配$pattern 的子串.

來自 example a-7 例子的一部分.

1 # 來自"days-between.sh"例子的乙個函式.

2 # 去掉傳遞進來的引數開頭的 0.

34 strip_leading_zero () # 去掉開頭的 0

5 # "1"指的是"$1" -- 傳進來的引數.

7} # "0"就是我們想從"$1"中刪除的子串.

下邊是 manfred schwarb's 對上邊函式的乙個改版.

1 strip_leading_zero2 () # 去掉開頭的 0,因為如果不去掉的話

# bash 將會把這個值作為 8 進製解釋.

2 # 使用區域性變數,匹配最長的連續的 0.

# 開啟擴充套件 globbing.

5 shopt -u extglob

6 _strip_leading_zero2=$

7 # 如果輸入為 0,那麼返回 0 來代替"".

8}另乙個例子

1 echo `basename $pwd` # 當前工作目錄的 basename.

2 echo "$" # 當前工作目錄的 basename.

3 echo

4 echo `basename $0` # 指令碼名字.

5 echo $0 # 指令碼名字.

6 echo "$" # 指令碼名字.

7 echo

8 filename=test.data

9 echo "$" # data

$, $

從$var 結尾刪除最近或最遠匹配$pattern 的子串.

bash version2 新增了額外的選項.

example 9-17 引數替換中的模式匹配

################################start

script#######################################

1 #!/bin/bash

2 # patt-matching.sh

34 # 使用# ## % %%來進行引數替換操作的模式匹配.

56 var1=abcd12345abc6789

7 pattern1=a*c # * (萬用字元) 匹配 a - c 之間的任何字元.

89 echo

10 echo "var1 = $var1" # abcd12345abc6789

11 echo "var1 = $" # abcd12345abc6789

12 # (alternate form)

13 echo "number of characters in $ = $"

14 echo

1516 echo "pattern1 = $pattern1" # a*c (everything between 'a' and 'c')

17 echo "--------------"

18 echo '$ =' "$" # d12345abc6789

19 # 最短的可能匹配, 去掉 abcd12345abc6789 的前 3 個字元

20 # |-| ^^^

21 echo '$ =' "$" # 6789

22 # 最遠的匹配,去掉 abcd12345abc6789 的前 12 個字元.

23 # |----------| ^^^^

2425 echo; echo; echo

2627 pattern2=b*9 # 'b' 到'9'之間的任何字元

28 echo "var1 = $var1" # 還是 abcd12345abc6789

29 echo

30 echo "pattern2 = $pattern2"

31 echo "--------------"

32 echo '$ =' "$" # abcd12345a

# 最近的匹配, 去掉 abcd12345abc6789 的最後 6 個字元

3334 # |----| ^^^^

35 echo '$ =' "$" # a

36 # 最遠匹配, 去掉 abcd12345abc6789 的最後 12 個字元

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

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

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

4142 echo

4344 exit 0

Shell之傳遞引數

注 此部落格使用的是bash shell 在執行 shell 指令碼時,可以向指令碼傳遞引數。bin bash echo this is a test code echo input parameter echo file name is 0表示本檔案名字 echo my name is 1 4表示...

shell學習筆記之if引數

b 當file存在並且是塊檔案時返回真 c 當file存在並且是字元檔案時返回真 d 當pathname存在並且是乙個目錄時返回真 e 當pathname指定的檔案或目錄存在時返回真 f 當file存在並且是正規檔案時返回真 g 當由pathname指定的檔案或目錄存在並且設定了sgid位時返回為真...

Shell學習之傳遞引數

shell 傳遞引數 我們可以在執行 shell 指令碼時,向指令碼傳遞引數,指令碼內獲取引數的格式為 n。n 代表乙個數字,1 為執行指令碼的第乙個引數,2 為執行指令碼的第二個引數,以此類推 例項以下例項我們向指令碼傳遞三個引數,並分別輸出,其中 0 為執行的檔名 bin bash author...