Daftar nama alias, fungsi dan variabel di zsh

11

Saya perlu cara untuk membuat daftar nama (tanpa isi / isi / nilai) dari alias, fungsi, variabel, array di zsh. Secara optimal seharusnya berperilaku seperti 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.

Latar Belakang

Saya membutuhkan ini untuk mengembangkan env_parallel.zsh: https://www.gnu.org/software/parallel/env_parallel.html

Ole Tange
sumber

Jawaban:

18

Alias ​​dan fungsi terkandung dalam aliasesdan functions, dan orang hanya perlu mencetak kunci tersebut. "Variabel dan array" lebih rumit; parametersmungkin cukup?

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

(Anda mungkin juga perlu builtins,, commandsdan mungkin hal-hal lain yang didaftar dari print -l ${(k)dan kemudian dihancurkan tab, dengan asumsi penyelesaian diaktifkan.)

thrig
sumber
1
Mungkin ${(kM)parameters:#[[:alpha:]_][[:alnum:]_]#}(dengan extendedglob) hanya parameter yang variabel.
Stéphane Chazelas
for k in ${(koM)parameters:#[[:alpha:]][[:alnum:]_]#}; do; [[ ${(M)parameters[$k]:#association*} ]] || continue; print -- "$k"; done( extendedglobperlu diatur) harus memberi Anda daftar pendek variabel untuk digunakan tergantung pada data apa yang Anda cari. Mengubah [[:alpha:]]ke [[:alpha:]_]akan menyertakan array asosiatif (atau variabel) yang dimulai dengan garis bawah. Mengubah association*ke scalar*atau array*atau integer*atau *export*akan memberikan hasil tipe tersebut. "Variabel dan array" membutuhkan lebih banyak pekerjaan.
Friartek