I want to get a list of all environment variables (shell variables? exported variables?) and their values at a given time, in zsh.
What is the proper way to do this?


It sounds like you want env.


export prints out the list of environment variables and their values. The values are quoted, the output of export is suitable for reading back into the shell. The variables are printed in alphabetical order.

If you want shell variables as well, use set. If you want shell variables with type annotations (exported, integer, etc.), use typeset.

You can use export and set on other shells as well, but most don't quote the output, so it's not parseable. typeset is available (with different behavior) on ksh and bash.

If you want the environment variables, there's also the env command, which prints unsorted, unquoted

If you only want the names, access the parameters associative array. The keys are the parameter names and the values indicate the types.

  • Some difference with env: env -i '$(reboot)=1' zsh -c export (compare with bash where you don't want to feed it back into the shell (fixed in 4.4)). And env -i zsh 'export foo; export'. See also zsh.org/mla/workers/2016/msg01840.html and the env -i zsh -c export bug in recent versions of zsh which I've just reported. – Stéphane Chazelas Sep 30 '16 at 9:09
  • 2
    See also typeset -p +H -m '*' to list all variables, including hidden ones. – Stéphane Chazelas Sep 30 '16 at 9:15

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.