다음 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가 좋은 일반적인 솔루션이라고 생각하지 않습니다.