2

我正在从 github 阅读 shell 脚本:脚本

它有两行代码让我感到困惑。我以前从未见过像这样在 bash 中使用 ##。谁能向我解释一下,它是如何工作的?谢谢。

branch_name=$(git symbolic-ref -q HEAD)
branch_name=${branch_name##refs/heads/}

注意:第一行产生类似 'refs/heads/master' 的内容,下一行删除前导 refs/heads 使 branch_name 成为 master。

4

2 回答 2

7

bash(1)手册页,EXPANSION部分,Parameter Expansion小节:

   ${parameter#word}
   ${parameter##word}
          Remove matching prefix pattern.  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  pat‐
          tern  (the  ``##''  case)  deleted.

当然,也可以在手册中找到(但它似乎不支持链接到这个确切的文本;在页面上搜索##)。

于 2013-01-25T14:13:52.350 回答
2

在这里查看描述了许多其他字符串操作技巧的地方。简而言之

${string##substring}

$substring从 的 前面删除最长的匹配项$string

于 2013-01-25T14:15:32.807 回答