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?

  • 1
    typeset -x or equivalently export, or /usr/bin/env (or just env if your $PATH is set right, i.e contains /usr/bin:) Aug 13, 2022 at 9:53
  • If you use zsh shell, I would recommend installing these plugins: alias-finder , aliases. To install append the mentioned plugin names in ~/.zshrc to the line describing plugins.
    – Koo
    Sep 7, 2022 at 12:17
  • env and export are alsoe good options when combined with grep like this export | grep "git"
    – Koo
    Sep 7, 2022 at 12:27

2 Answers 2


It sounds like you want env.

  • 3
    This doesn't work for me. The HOST env is missing from the output of env. On zsh I was able to list everything with set.
    – Chris
    Dec 20, 2021 at 3:14
  • 1
    @Chris If $HOST is missing from env, then it's not an environment variable.
    – Chris Down
    Dec 22, 2021 at 17:18
  • 2
    @ Chris (nice name!). Where's echo $HOST coming from? Is this some sort of zsh variable that's not an actual OS environment variable? For my purposes $HOST exists and has the value I want, but it only appears in set and not env.
    – Chris
    Jan 6, 2022 at 23:27
  • 3
    @Chris $HOST is a zsh variable instantiated on startup which is not exported by default. Most variables are not environment variables unless you explicitly export them. See zsh.sourceforge.io/Doc/Release/Parameters.html#index-HOST
    – Chris Down
    Jan 7, 2022 at 19:04

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. Sep 30, 2016 at 9:09
  • 2
    See also typeset -p +H -m '*' to list all variables, including hidden ones. Sep 30, 2016 at 9:15

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .