2014-03-01 175 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