Zsh Mailing List Archive
Messages sorted by: Reverse Date, Date, Thread, Author

Re: var=$( typeset "$1" ) ... not within a function.

On Thu, Oct 20, 2022 at 6:58 PM Ray Andrews <rayandrews@xxxxxxxxxxx> wrote:
>   $ typeset -mp CDPATH
> typeset -T CDPATH cdpath=(  )

That's actually a bug ... "typeset -T" doesn't take two arguments in
that format.

> ... but the same command from within a script or function gives:
> typeset -g -T CDPATH cdpath=(  )

The -g is because typeset -p is supposed to be outputting a command
that can be sent back through "eval".  If you were to execute that
typeset without the -g when inside a function, you would create a new
local CDPATH variable.  The -g makes sure you are still referencing
the global.

> ... and if I scan the entire output of "$ typeset -p" and look for
> 'CDPATH' I get:
> typeset -T CDPATH cdpath=(  )
> typeset -aT CDPATH cdpath=(  )

The first one is the (incorrect) assignment for $CDPATH.
The second one is the (correct) assignment for $cdpath.
These are "tied" variables (the -T) meaning that if you change either
one of them, the other also changes.

> ... and from within a function the '-g' is added.

See above.

> ... and while I'm whining I notice that 'set' never does anything like:
> "CDPATH cdpath", it puts them on separate lines.  Dunno, couldn't they
> have separate values?

No, they can't.  One is a colon-separated string and the other is an
array, but they always track one another.

Messages sorted by: Reverse Date, Date, Thread, Author