bash - 最后一个特定字符后的表达式

时间:2012-03-02 11:39:34

标签: linux bash shell unix scripting

foo="/sdf/here/jfds"
bar="${foo##*/}"

Canyone解释" ${foo##*/}"表达式有效,因为我知道它将在最后一个正斜杠(即jfds)之后返回字符串,但我不知道它是如何做的(或者这种类型的表达式被调用)?

1 个答案:

答案 0 :(得分:32)

它是几个shell功能之一,通常称为 shell扩展。此特定扩展称为参数扩展*。

您可以将此特定shell扩展形式视为 left-truncate 字符串函数。您必须使用如图所示的花括号(这不是可选的)..

如果只使用一个#,则表示只截断后面的模式的第一个次出现(直到结束}。当你使用两个时##,表示左截断所有连续模式匹配。var="a/b/c"; echo ${var#*/}的结果为b/c ... echo ${var##*/}返回{{1 }。

有一个互补的右截断。它使用c代替% ...(我“记住”,因为#就像bash注释;总是在左边)。

#被视为bash通配符扩展。

以下是所有shell扩展的列表,按优先顺序显示。

扩展的顺序是:

*