pushd [ -qsLP ] [ arg ]
pushd [ -qsLP ] old new
pushd [ -qsLP ] {+|-}n
       Change the current directory, and push the old current directory
       onto the directory stack.  In the first form, change the current
       directory to arg.  If arg is not specified, change to the second
       directory on the stack (that is, exchange the top two entries), or
       change to $HOME if the PUSHD_TO_HOME option is set or if there is
       only one entry on the stack.  Otherwise, arg is interpreted as it
       would be by cd.  The meaning of old and new in the second form is
       also the same as for cd.

       The third form of pushd changes directory by rotating the
       directory list.  An argument of the form `+n' identifies a stack
       entry by counting from the left of the list shown by the dirs
       command, starting with zero.  An argument of the form `-n' counts
       from the right.  If the PUSHD_MINUS option is set, the meanings of
       `+' and `-' in this context are swapped.

       If the -q (quiet) option is specified, the hook function chpwd and
       the functions in the array $chpwd_functions are not called, and
       the new directory stack is not printed.  This is useful for calls
       to pushd that do not change the environment seen by an interactive
       user.

       If the option -q is not specified and the shell option
       PUSHD_SILENT is not set, the directory stack will be printed after
       a pushd is performed.

       The options -s, -L and -P have the same meanings as for the cd
       builtin.
