2

githubからシェルスクリプトを読んでいます:script

2行のコードで混乱しました。##がこのように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セクションParameterExpansionサブセクションから:

   ${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 に答える