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