Deklaracja tablicy lokalnej zsh powoduje dziwne zachowanie

1

Jestem nowy w Zsh i odkryłem dziwne zachowanie, ale to wszystko.

Właśnie spotkałem to niezwykle dziwne zachowanie, kiedy deklarowałem lokalną tablicę w funkcji zsh, którą pisałem dla mojego pliku .zshrc. Kiedy zadeklarowałem lokalną tablicę, spowodowałem, że mój monit oszalał. W końcu prześledziłem go do dwóch bardzo dziwnych funkcji, które zostały losowo utworzone. Sprowadziłem to do prostej skrzynki:

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

Pierwszą dziwną rzeczą jest to, że frognigdy nie jest drukowana z anonimowej funkcji. Ale naprawdę dziwne jest to, że zamiast tego dwie funkcje zostały nazwane foobar=i localzostały utworzone.

Powoduje to wszelkiego rodzaju problemy z moim monitem zsh. Każde localużycie słowa kluczowego powoduje jego wydrukowanie frog.

Naprawdę zastanawiam się, co do cholery spowodowało, że Zsh stworzył te funkcje.

ja używam zsh 5.0.2

Sudo Bash
źródło

Odpowiedzi:

1

Odkryłem, że to musiał być błąd w mojej wersji zsh. Uaktualniłem do wersji zsh 5.6.2 i stwierdziłem, że zachowanie zostało naprawione w tej wersji. Mam też teorię, co Zsh próbował zrobić w sytuacji problemowej. Kiedy biegnę:

% foo bar() echo hi

Tworzy dwie funkcje fooi barobie po prostu echo hi.

Myślę, że zsh interpretował local foobar=()jako definiowanie dwóch funkcji: locali foobar=. To jest naprawdę dziwne, ponieważ nie sądziłem, że locallub foobar=będą to prawidłowe nazwy funkcji. Byłbym ciekawy, gdzie jest błąd w źródle zsh.

Odkryłem również, że właściwym sposobem deklarowania tablicy lokalnej jest local -a foobar

Sudo Bash
źródło