git이 포함된 디렉토리가 있고 git branch
다음과 같은 출력이 제공됩니다.
$ git branch
branch1
* branch2
master
*
현재 지점에 태그를 지정합니다 . 이 출력을 스크립트에서 사용하고 싶습니다. 그래서 다음과 같은 줄을 반복합니다.
$ for line in $(git branch); do echo "${line}"; done;
branch1
README.txt
branch2
master
질문:
무슨 일이에요 *
? 왜 README.txt
[1] 이 표시되나요 ?
git branch
공백을 사용하여 법선에서 반환된 줄을 있는 그대로 반복하려면 어떻게 해야 합니까 *
?
추신: 저는 지금 Mac을 사용하고 있습니다.
[1] (또는 저장소의 다른 파일이지만 "README.txt" 파일은 하나만 있음)
답변1
$(git branch)
루프를 풀어 for
루프를 반복 하면 여러 줄 문자열로 확장됩니다.
branch1
* branch2
master
명령 대체는 따옴표가 없기 때문에 공백, 탭 및 줄 바꿈(기본적으로)을 기준으로 4개의 단어로 분할됩니다.
branch1 * branch2 master
그런 다음 각 단어는 파일 이름(와일드카드)을 생성합니다. 두 번째 단어는 *
현재 디렉터리의 모든(숨겨지지 않은) 파일 이름으로 대체됩니다. 이는 귀하의 경우 파일 이름인 README.txt
.
따라서 루프가 반복할 최종 목록은 다음과 같습니다.
branch1 README.txt branch2 master
반대로, 스크립트로 출력하고 싶다면 다음을 사용하세요.
git branch
다른 작업을 수행할 필요가 없습니다.
출력을 변수에 저장하려면 다음을 사용하십시오.
branches=$( git branch )
그 사람의 이름을 알고 싶나요?현재의그런 다음 이름 앞에 다음이 오는 분기를 추출합니다 *
.
curr_branch=$( git branch | awk '/^\*/ { print $2 }' )
반복의 출력을 원하면 루프를 git branch
사용하십시오 .while
git branch |
while read -r star name; do
if [ -z "$name" ]; then
name=$star
printf 'One branch is "%s"\n' "$name"
else
printf 'The current branch is "%s"\n' "$name"
fi
done
git branch --show-current
를 사용하여 현재 분기의 이름을 직접 가져올 수도 있습니다 .