正则表达式的解释

时间:2014-02-14 10:52:12

标签: regex bash shell

以下正则表达式意味着什么?

fspec="/exp/home1/abc.txt"
fname="${fspec##*/}"

我知道它的作用,但不知道它是怎么做的?我不清楚获取fname。

请解释。

2 个答案:

答案 0 :(得分:4)

${var##*/}语法将所有内容都删除到最后/

$ fspec="/exp/home1/abc.txt"
$ echo "${fspec##*/}"
abc.txt

通常,${string##substring}会从$substring前面删除$string的最长匹配。

如需进一步参考,您可以查看Bash String Manipulation,并附上几个解释和示例。

答案 1 :(得分:1)

以下是bash文档的解释。

${parameter#word}
${parameter##word}
The  word  is  expanded  to  produce  a pattern just as in pathname
expansion.  If the pattern matches the beginning of  the  value  of
parameter,  then  the result of the expansion is the expanded value
of parameter with the shortest matching pattern (the ``#'' case) or
the longest matching pattern (the ``##'' case) deleted.  

根据上述说明,在您的示例 word = * / 中,这意味着零(或)以 / 结尾的任意数量的字符。

bash-3.2$fspec="/exp/home1/abc.txt"
bash-3.2$echo "${fspec##*/}"   # Here it deletes the longest matching pattern
# (i.e) /exp/home1/
# Output is abc.txt

bash-3.2$echo "${fspec#*/}"    # Here it deletes the shortest matching patter
#(i.e) /
# Output is exp/home1/abc.txt
bash-3.2$