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

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

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.