将多行连接成“特殊字符”分隔的字符串

Ale*_*lls 2 shell-script text-processing

假设我有这些 Bash 命令:

$ sha="$(git log --all --format=format:%H -n 1 -- .npp.json)"
$ git branch  --contains "$sha" | tr -d " *"
Run Code Online (Sandbox Code Playgroud)

现在可能会记录如下内容:

master
dev
remotes/origin/foo
Run Code Online (Sandbox Code Playgroud)

我的问题是 - 是否有一些 Bash 实用程序可以为我连接所有输出,以便我得到如下内容:

master:dev:remotes/origin/foo
Run Code Online (Sandbox Code Playgroud)

该实用程序可能如下所示:

$ git branch  --contains "$sha" | tr -d " *" | concat ":"
Run Code Online (Sandbox Code Playgroud)

当然,最终值需要回显,所以它可能看起来像:

$ result="$(git branch  --contains "$sha" | tr -d " *" | concat ":")"
$ echo "$result"
Run Code Online (Sandbox Code Playgroud)

PSk*_*cik 5

如果你问如何改变

master
dev
remotes/origin/foo
Run Code Online (Sandbox Code Playgroud)

到

master:dev:remotes/origin/foo
Run Code Online (Sandbox Code Playgroud)

那么tr '\n' :将是经典的 UNIXy 方式来做到这一点。

至于修剪可能的最终换行符,您可以先将输出保存到变量中,$()然后$()将删除它,或者您可以进行替换,将结果保存在变量中,然后variable=${variable%:}修剪最后的冒号。(有关更多选项,请参阅/sf/ask/115781501/。)