複数行を「特殊文字」で区切られた文字列に連結します。

複数行を「特殊文字」で区切られた文字列に連結します。

次の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は良い一般的な解決策であるとは思わない。

関連情報