여러 줄을 "특수 문자"로 구분된 문자열로 연결합니다.

여러 줄을 "특수 문자"로 구분된 문자열로 연결합니다.

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

관련 정보