It is so easy to do that in zsh:

typeset -U path

That’s all.

As you can imagine -U stands for ‘unique’. From doc:

       -U     For  arrays  (but not for associative arrays), keep only the
              first occurrence of each duplicated value.  This may also be
              set for colon-separated special parameters like PATH or FIG‐
              NORE, etc.  This flag has a different meaning when used with

Btw. just care it is not -u. This flag just converts the content to uppercase.

All OK!


You may wonder why is path instead of PATH? In zsh they are different but related things. The $path array variable is tied to the $PATH scalar string variable. The $path helps to find external programs, i.e. anything not part of the shell, any command other than a builtin, function or alias. Any modification on $path or $PATH is reflected in the other.

If you check them, you will see:

$ echo $path
/usr/local/bin /usr/bin /bin /sbin

$ echo $PATH

For more details you can go to : A User’s Guide to the Z-Shell - Path