zsh 로컬 배열 선언으로 인해 이상한 동작이 발생합니다.


1

나는 zsh에 익숙하지 않고 이상한 행동을 발견했지만,이 모든 것들이 정상입니다.

방금 .zshrc 파일에 대해 작성한 zsh 함수에서 로컬 배열을 선언 할 때이 매우 이상한 동작을 보았습니다. 내가 로컬 어레이를 선언했을 때, 나는 프롬프트가 미쳐 버렸습니다. 결국 무작위로 생성 된 두 개의 매우 이상한 함수를 추적했습니다. 나는 그것을 단순한 경우로 축소했다.

% function () { local foobar=(); echo frog; }
% echo ${functions[foobar=]}
        echo frog
% echo ${functions[local]}
        echo frog

첫 번째 이상한 점은 frog 익명의 기능에서 결코 인쇄되지 않습니다. 하지만 실제로 이상한 것은 두 개의 함수가 foobar=local 만들어야합니다.

이로 인해 zsh 프롬프트에 모든 종류의 문제가 발생합니다. 언제든지 local 사용 된 키워드가 인쇄 됨 frog.

나는이 지구상에서 zsh로 하여금 그 기능을 만드는 원인이 무엇인지 궁금합니다.

나는 사용하고있다. zsh 5.0.2

답변:


1

나는 zsh 버전의 버그 였음을 발견했다. 나는 zsh 5.6.2로 업그레이드했고 그 동작은 그 버전에서 수정되었다. 나는 또한 zsh가 문제 상황에서 무엇을하려고했는지에 관한 이론을 가지고있다. 내가 달릴 때 :

% foo bar() echo hi

그것은 두 개의 함수를 생성하는데, foobar, 둘 다 간단하게 echo hi.

나는 zsh가 해석하고 있었다고 생각한다. local foobar=() 두 가지 기능을 정의하는 것으로 localfoobar=. 내가 생각하지 않았던 것처럼 이것은 정말로 기괴하다. local 또는 foobar= 유효한 함수 이름이 될 것입니다. 버그가 zsh 소스에서 어디에 있는지 궁금 할 것입니다.

또한 로컬 배열을 선언하는 적절한 방법은 local -a foobar

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.