假设我有这些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"发布于 2018-08-12 22:34:03
如果你在问如何改变
master
dev
remotes/origin/foo至
master:dev:remotes/origin/foo那么,tr '\n' :将是经典的UNIXy方法。
至于裁剪一个可能的最终换行符,您可以首先通过$()将输出保存到一个变量,然后$()会删除它,或者您可以执行替换,将结果保存在一个变量中,然后执行variable=${variable%:}来修剪它最后的冒号。(有关更多选项,请参见https://stackoverflow.com/questions/1654021/how-can-i-delete-a-newline-if-it-is-the-last-character-in-a-file。)
发布于 2018-08-12 22:34:45
对于我的用例,分割空格字符是可行的,因为git分支不能包含空格字符。
所以我可以这么做:
git branch --contains "$sha" | tr -d " *" | xargs但是对于泛型解决方案,它将有助于控制分隔字符是什么,所以我并不认为上面使用的xargs是一个很好的泛型解决方案。
https://unix.stackexchange.com/questions/462184
复制相似问题