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

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

假设我有这些 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 是一个很好的通用解决方案。

相关内容