khai báo mảng cục bộ zsh gây ra hành vi lạ


1

Tôi mới làm quen với zsh và đã phát hiện ra một số hành vi kỳ lạ, nhưng điều này đứng đầu tất cả.

Tôi vừa bắt gặp hành vi cực kỳ lạ này khi khai báo một mảng cục bộ trong hàm zsh mà tôi đang viết cho tệp .zshrc của mình. Khi tôi khai báo một mảng cục bộ, nó khiến cho dấu nhắc của tôi phát điên. Cuối cùng tôi đã truy tìm nó trở lại hai chức năng rất lạ được tạo ngẫu nhiên. Tôi đã giảm nó thành một trường hợp đơn giản:

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

Điều kỳ lạ đầu tiên là frogkhông bao giờ được in từ chức năng ẩn danh. Nhưng điều thực sự kỳ lạ là thay vào đó hai hàm được đặt tên foobar=localđược tạo.

Điều này gây ra tất cả các loại vấn đề cho dấu nhắc zsh của tôi. Bất cứ khi nào localtừ khóa được sử dụng nó được in frog.

Tôi thực sự tự hỏi những gì trên trái đất gây ra zsh để tạo ra các chức năng.

tôi đang dùng zsh 5.0.2

Câu trả lời:


1

Tôi thấy rằng nó phải là một lỗi trong phiên bản zsh của tôi. Tôi đã nâng cấp lên zsh 5.6.2 và thấy rằng hành vi đã được sửa trong phiên bản đó. Tôi cũng có một lý thuyết về những gì zsh đã cố gắng làm trong tình huống vấn đề. Khi tôi chạy:

% foo bar() echo hi

Nó tạo ra hai chức năng, foobar, cả hai đều đơn giản echo hi.

Tôi nghĩ rằng zsh đã được giải thích local foobar=()là xác định hai chức năng: localfoobar=. Điều này thực sự kỳ lạ, như tôi không nghĩ rằng localhoặc foobar=sẽ là tên hàm hợp lệ. Tôi tò mò muốn xem lỗi ở đâu trong nguồn zsh.

Tôi cũng thấy rằng cách thích hợp để khai báo một mảng cục bộ là local -a foobar

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.