Liệt kê tên của các bí danh, hàm và biến trong zsh


11

Tôi cần một cách để liệt kê các tên (không có phần thân / nội dung / giá trị) của các bí danh, hàm, biến, mảng trong zsh. Tối ưu nó nên hành xử như compgen:

compgen -a # will list all the aliases you could run.
compgen -A function # will list all the functions you could run.
compgen -A variable # will list all the variables defined.

Lý lịch

Tôi cần điều này để phát triển env_abul.zsh: https://www.gnu.org/software/abul/env_abul.html

Câu trả lời:


18

Bí danh và chức năng được chứa trong aliasesfunctions, và người ta chỉ cần in các phím như vậy. "Biến và mảng" là khó khăn hơn; parameterscó thể đủ?

print -rl -- ${(k)aliases} ${(k)functions} ${(k)parameters}

(Bạn cũng có thể cần builtins, commandsvà có lẽ những thứ khác được liệt kê từ print -l ${(k)đó và sau đó trộn tab, giả sử hoàn thành được bật.)


1
Có lẽ ${(kM)parameters:#[[:alpha:]_][[:alnum:]_]#}(với extendedglob) chỉ các tham số là các biến.
Stéphane Chazelas

for k in ${(koM)parameters:#[[:alpha:]][[:alnum:]_]#}; do; [[ ${(M)parameters[$k]:#association*} ]] || continue; print -- "$k"; done( extendedglobcần được đặt) sẽ cung cấp cho bạn một danh sách ngắn các biến sẽ sử dụng tùy thuộc vào dữ liệu bạn đang tìm kiếm. Thay đổi [[:alpha:]]thành [[:alpha:]_]sẽ bao gồm các mảng kết hợp (hoặc biến) bắt đầu bằng dấu gạch dưới. Thay đổi association*để scalar*hoặc array*hoặc integer*hoặc *export*sẽ cung cấp cho bạn những kết quả của các loại. "Biến và mảng" cần thêm một chút công việc.
Friartek
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.