次のBashコマンドがあるとしましょう。
$ sha="$(git log --all --format=format:%H -n 1 -- .npp.json)"
$ git branch --contains "$sha" | tr -d " *"
これで、次の内容が記録されることがあります。
master
dev
remotes/origin/foo
私の質問は - すべての出力を接続して次のような結果を得るためのBashユーティリティはありますか?
master:dev:remotes/origin/foo
ユーティリティは次のとおりです。
$ git branch --contains "$sha" | tr -d " *" | concat ":"
もちろん、最終値はエコーする必要があるため、次のようになります。
$ result="$(git branch --contains "$sha" | tr -d " *" | concat ":")"
$ echo "$result"
答え1
どのように変えるか尋ねると
master
dev
remotes/origin/foo
到着
master:dev:remotes/origin/foo
まあ、これはtr '\n' :
古典的なUNIXyアプローチになります。
可能な最後の改行を切り捨てるには、最初に出力をviaを介して変数に保存し、次に削除または置換を実行し、$()
結果$()
を変数に保存してからvariable=${variable%:}
最終コロンまで切り取ります。 (望むよりhttps://stackoverflow.com/questions/1654021/how-can-i-delete-a-newline-if-it-is-the-last-character-in-a-fileより多くの選択のために。 )
答え2
私のユースケースでは、gitブランチにスペース文字を含めることができないため、スペース文字分割が機能しました。
だから私はこれを行うことができます:
git branch --contains "$sha" | tr -d " *" | xargs
しかし、一般的な解決策の場合、区切り文字が何であるかを制御できれば役に立つ可能性があるため、上記で使用されているxargsは良い一般的な解決策であるとは思わない。