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

Re: new user questions and issues

I can snipe the easier to explain ones.
On 05/06/2015 01:37 PM, Kannan Varadhan wrote:

> Issue #1:  Programmatic Scripting, how to?
> I would like to do the following:
> for var in path infopath manpath cdpath ; do
>     typeset -agU $var
>     local capsvar
>     capsvar=$(echo $var | tr 'a-z' 'A-Z')
>     $var=( $(echo ${$capsvar} | sed 's/:/ /g') )
> done
> But this does not work, because ${$capsvar}  gets me a zsh: bad substitution.
> Is there any way to achieve this in zsh?
You can use the parameter expansion flag P. ''${(P)capsvar}''

With the exception of infopath, The arrays you are trying to define are
already created and tied to the uppercase scalar parameters.
Any change made to one is reflected in the other.

echo by default interprets c string escapes, you can disable that with
the -E option.

You could avoid the command substitution with the parameter expansion
flag U ''capsvar=${(U)var}'' to change the case of the value.

$var=(...) is also an error. ''set -A $var element1 element2 ...'' will
allow you to indirectly set arrays
> Issue #2.  Overridden local variables get echoed?
> ~ 5% cat lib/zsh/test2                                                  9:55:52
> function test2 
>     print why is the previous value echoed when a local variable is 'overridden?'
It actually happens when you use typeset, local, etc. on a parameter
that is already defined. You can use the option TYPESET_SILENT option to
silence it.

from the typeset section of zshbuiltins(1):
If  the  shell  option  TYPESET_SILENT  is  not  set, for each remaining
name that refers to a parameter that is set, the name and value of the
parameter are printed in the form of an assignment.  Nothing is printed
for newly-created parameters, or when any attribute flags listed below
are given along with the name.  Using `+' instead of minus to introduce
an attribute turns it off.

Pretty sure #3 and #4 is due to how typeset creates a local parameters
when used in a function. So typeset -U PATH create a new parameter
without a value, with the -U attribute.

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