以下正则表达式是什么意思?
fspec="/exp/home1/abc.txt"
fname="${fspec##*/}"
我知道它做什么,但不知道它是如何做的?我不清楚获取 fname。
请解释一下。
${var##*/}
语法将所有内容剥离到最后一个/
。
$ fspec="/exp/home1/abc.txt"
$ echo "${fspec##*/}"
abc.txt
一般来说,${string##substring}
从$string
前面剥离最长的$substring
比赛.
为了进一步参考,您可以例如检查 Bash 字符串操作 有几个解释和示例。
以下是 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$