1

任何人都可以帮我解释为什么使用这种方式获取文件名。例如:文件是:

fileName = "/Users/test/am01/output/output.log"
fileName=${fileName##*/}

然后我们得到了

fileName = output.log

你们能帮我解释一下##* 是什么意思吗,我对这个正则表达式感到很困惑。

此外,还有另一个这样的例子:

filename="testdata.done"
echo ${filename%.done}
then we got test data

% 是什么意思,我从来没有见过这个正则表达式。

4

2 回答 2

1

这不是 reqexp,它是普通的旧 bash 魔法。本指南说:

${string##substring}

从 $string 的前面删除 $substring 的最长匹配。

星号在这里是一个通配符,因此*/意味着删除以 . 结尾的最长子字符串/

"/Users/test/am01/output/"在你的情况下。

您问题的 b 部分:

${string%substring}

从 $string 后面删除 $substring 的最短匹配。

于 2013-06-24T23:35:29.943 回答
1

不是正则表达式

这是 BASH参数扩展。从那个参考:

还有用于删除前缀和后缀的扩展。${VAR#pattern} 形式从扩展值中删除与模式匹配的任何前缀。删除的前缀是最短匹配前缀,如果您使用双井号/哈希标记,最长匹配前缀将被删除。类似地,形式 ${VAR%pattern} 删除匹配的后缀(最短后缀的单个百分比,最长后缀的两倍)。

于 2013-06-24T23:37:36.857 回答