2010-03-21 176 views
1

匹配下面是一個例子,以獲得一個文件名格局猛砸

bash-3.2$ pathandfile=/tmp/ff.txt 
bash-3.2$ filename=$(basename $pathandfile) 
bash-3.2$ echo $filename  
ff.txt  
bash-3.2$ echo ${filename##*.}  
txt  
bash-3.2$ echo ${filename%.*}  
ff  

的不同部分我想知道什麼呢##%,並在圖案的意思。如何匹配工作?

感謝和問候!

回答

4

的聯機幫助頁bash說:

$ {參數#字}
$ {參數##字}

刪除匹配前綴模式。該單詞被擴展爲在路徑名擴展中產生一個模式,如 。如果模式與參數值的開頭匹配,則擴展結果爲參數的擴展值,其中最短匹配模式(#)或最長匹配模式( ##)被刪除。如果參數是@*,模式刪除操作依次應用於每個位置參數 ,並且擴展是由此產生的 列表。如果參數是以@*爲下標的數組變量,則將刪除操作依次應用於數組的每個成員,並將擴展 作爲結果列表。

$ {參數%字}
$ {參數%%字}

刪除匹配的後綴模式。該單詞被擴展爲在路徑名擴展中產生一個模式,如 。如果模式與擴展的參數值 的尾部相匹配,則擴展結果是 參數的擴展值,其中最短匹配模式(%)或最長匹配模式(%%)被刪除。如果參數是@*,則將依次對每個位置參數應用模式刪除 操作,擴展操作爲 結果列表。如果參數是一個以@*爲下標的數組變量,則會依次將 模式刪除操作應用於數組的每個成員,並且 擴展是結果列表。

2

參見http://tldp.org/LDP/abs/html/string-manipulation.html

  • ${string##substring}
    • 刪除從$字符串前面的子串$最長匹配。
  • ${string%substring}
    • 刪除從$字符串後面的子串$最短的匹配。
+2

而對於 '#'(散列)助記符是 '頭',併爲 '%'(百分比)助記符是 '尾巴'。 – 2010-03-21 18:48:10

+3

而且,在美國的英文QWERTY鍵盤上,「#」是「$」的*左邊*,「%」是「$」的*右邊*。 – 2010-03-21 19:22:20