正则表达式匹配文件名

时间:2014-03-01 00:05:10

标签: regex bash

我知道这对你们中的一些人来说听起来很傻,但我对正则表达式的解决方案并不擅长。我在其他人编写的函数中遇到了以下表达式,无法弄清楚他/她在做什么。

REGEX 1

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

REGEX 2

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

正如您所猜测的,这些正则表达式评估正在脚本中使用,进行文件更新并移动它们。我想知道

的含义
${2%/*}/ 

${2##*/}

1 个答案:

答案 0 :(得分:4)

让我们举一个例子来更好地理解:

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

echo "${s##*/}"
foo
  1. 第一个表达式是在输入中的最后一个/之后丢弃文本。
  2. 第二个表达式是丢弃输入中最后/之前的所有文本。
  3. 您可以在man bash中看到更多详情:

    • ##*/用于匹配输入字符串开头/之前的最长字符串。
    • %/*用于匹配输入结束后/之后的文字。