1

Я новичок в zsh и обнаружил какое-то странное поведение, но это все превосходит.

Я только что столкнулся с этим чрезвычайно странным поведением, когда объявлял локальный массив в функции zsh, которую я писал для своего файла .zshrc. Когда я объявил локальный массив, это заставило меня сойти с ума. В конце концов я проследил это до двух очень странных функций, которые были созданы случайным образом. Я сократил это до простого случая:

% 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 ответ1

1

Я обнаружил, что это была ошибка в моей версии zsh. Я обновил до zsh 5.6.2 и обнаружил, что поведение было исправлено в этой версии. У меня также есть теория относительно того, что Zsh пытался сделать в проблемной ситуации. Когда я бегу:

% foo bar() echo hi

Он создает две функции, foo и bar , обе из которых просто echo hi .

Я думаю, что zsh интерпретировал local foobar=() как определяющий две функции: local и foobar= . Это действительно странно, так как я не думал, что local или foobar= будут правильными именами функций. Мне было бы любопытно увидеть, где ошибка была в исходном коде zsh.

Я также обнаружил, что правильным способом объявления локального массива является local -a foobar

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .