以下正则表达式意味着什么?
fspec="/exp/home1/abc.txt"
fname="${fspec##*/}"
我知道它的作用,但不知道它是怎么做的?我不清楚获取fname。
请解释。
答案 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$