2014-03-01 218 views
2

我知道這對你們中的一些人聽起來很愚蠢,但是我對正則表達式的解決方案並不擅長。我在其他人編寫的函數中遇到以下表達式,並且無法弄清楚他/她在做什麼。正則表達式匹配文件名

正則表達式1

[ ! -d ${2%/*}/ ] 

正則表達式2

cmp -s $2 ${2##*/} 

,你可以猜測,這些正則表達式評估被用在腳本中,這樣做文件更新,並來回移動它們。我想知道的

${2%/*}/ 

${2##*/} 

回答

4

意義讓我們舉個例子,以更好地理解:

s='abc/def/foo' 
echo "${s%/*}/" 
abc/def/ 

echo "${s##*/}" 
foo 
  1. 首先表現在輸入最後/後丟棄的文本。
  2. 第二個表達式將丟棄輸入中最後一個/之前的所有文本。

可以在man bash看到更多的細節:

  • ##*/用於/從輸入字符串的開始前最長的字符串相匹配。
  • %/*用於匹配輸入結束後的/之後的文本。
+1

嗯,像這個問題的聲音應該被標記爲'bash'而不是'regex',因爲問題中的模式實際上包含**通配符**。 – DavidRR