foo="/sdf/here/jfds"
bar="${foo##*/}"
Canyone解释" ${foo##*/}
"表达式有效,因为我知道它将在最后一个正斜杠(即jfds)之后返回字符串,但我不知道它是如何做的(或者这种类型的表达式被调用)?
答案 0 :(得分:32)
它是几个shell功能之一,通常称为 shell扩展。此特定扩展称为参数扩展*。
您可以将此特定shell扩展形式视为 left-truncate 字符串函数。您必须使用如图所示的花括号(这不是可选的)..
如果只使用一个#
,则表示只截断后面的模式的第一个次出现(直到结束}
。当你使用两个时##
,表示左截断所有连续模式匹配。var="a/b/c"; echo ${var#*/}
的结果为b/c
... echo ${var##*/}
返回{{1 }。
有一个互补的右截断。它使用c
代替%
...(我“记住”,因为#
就像bash注释;总是在左边)。
#
被视为bash通配符扩展。
以下是所有shell扩展的列表,按优先顺序显示。
扩展的顺序是:
*