git branch -r
현재 프로젝트에서는 다음과 같이 출력을 zsh의 배열로 가져오려고 합니다 .
% all_branches = ("${(@f)$(git branch -r)}")
그러나 이 명령을 실행하면 터미널에 다음과 같은 오류 메시지가 나타납니다.
zsh: bad pattern: ( origin/Backplane-Broken-Links
zsh의 분기 이름에 슬래시가 있는 문제가 있다고 추론합니다. git의 출력을 내 배열로 보낼 때 슬래시(및 다른 특수 문자가 있는 경우 다른 특수 문자)를 처리할 수 있는 방법이 있습니까?
답변1
( 에서 차용한 zsh
것처럼 ) 의 배열 할당 구문은 다음과 같습니다.bash
zsh
array=( value1 value2
value3...)
양쪽에 공백이 있을 수 없습니다 (그러나 배열의 구성원을 구성하는 단어뿐만 아니라 평소와 같이 단어를 구분하는 데 사용되는 =
공백, 탭 또는 개행 문자가 내부에 있을 수 있습니다 ).(...)
그래서 당신은 다음을 원합니다:
all_branches=("${(@f)$(git branch -r)}")
또는:
all_branches=( "${(@f)$(git branch -r)}" )
또는:
all_branches=(
"${(@f)$(git branch -r)}"
)
어떤 스타일을 좋아하는지에 따라 다릅니다.
all_branches=(${(f)"$(git branch -r)"})
작동할 것입니다. 빈 요소를 유지하려면 "..."
전체 확장을 플래그와 결합하세요. @
git 브랜치 이름은 비워둘 수 없다고 생각하며 어쨌든 $(...)
제거 될 것이라는 점에 유의하세요.모두후행 개행이므로 빈 분기가 출력 끝에 있으면 어쨌든 제거됩니다. 하지만 분할을 $(...)
방지하려면 여전히 참조가 필요합니다 .$IFS
그건 그렇고, 이것은 array = ()
and 함수 정의의 시작이 될 것입니다:array
=
$ array = ()
function> echo test
$ array
test
$ =
test
하지만:
array = (foo|bar)
명령이 발견되면 glob 패턴(있는 경우)과 일치하는 파일을 인수로 사용하여 실행됩니다 array
.=
(foo|bar)
하지만 여기서는 ("${(@f)$(git branch -r)}")
유효한 전역 패턴을 형성하지 않습니다.삭감.
완전성을 위해,
array = ( value1 value2 )
셸 rc
(Research Unix V10 및 plan9 셸)에서 유효한 구문입니다. 이 셸에서는 이 작업을 수행할 수 없으며 echo =
구문 오류가 발생합니다. 견적이 필요합니다 =
.