任何人都可以帮我解释为什么用这种方式获取文件名。 例如:文件是:
fileName = "/Users/test/am01/output/output.log"
fileName=${fileName##*/}
然后我们得到了
fileName = output.log
你们能不能帮我解释一下## *的意思,我对这个正则表达式的表达非常困惑。
此外,还有另一个例子:
filename="testdata.done"
echo ${filename%.done}
then we got test data
%是什么意思,我从未见过这个正则表达式。
答案 0 :(得分:1)
这不是reqexp,它是普通的老bash魔法。 这个guide说:
${string##substring}
从$ string前面删除$ substring的最长匹配。
星号在这里是通配符,因此*/
表示删除以/
结尾的最长子字符串。
即。在你的情况下"/Users/test/am01/output/"
。
问题的b部分:
${string%substring}
从$ string后面删除$ substring的最短匹配。
答案 1 :(得分:1)
不是正则表达式!
这是BASH parameter expansion。从那个参考:
还有用于删除前缀和后缀的扩展。表格 $ {VAR#pattern}从匹配的扩展值中删除任何前缀 模式。删除的前缀是最短的匹配前缀if 你使用双磅符号/哈希标记,最长的匹配前缀是 除去。类似地,$ {VAR%pattern}形式删除了匹配的后缀 (单个百分比表示最短的后缀,双倍表示最长的后缀)。