Zsh Mailing List Archive
Messages sorted by:
Reverse Date,
Date,
Thread,
Author
Re: [PATCH] (?) typeset array[position=index]=value
2021-06-02 13:34:57 +0000, Daniel Shahaf:
[...]
> Haven't read the whole thread, so apologies if I'm missing something, but:
>
> Please let's not invent a reserved word that uses different variable
> expansion rules. The sequence «hash[$key]» should mean the same thing
> everywhere.
That's the problem here.
It's already different in
hash[$key]=1
typeset hash[$key]=1 # same as in assignment in recent versions
# of zsh where here typeset is a keyword
(( hash[$key] = 1 ))
unset hash[$key] # globbing performed.
read hash[$key]
$dryrun typeset hash[$key]=1 # here typeset not recognised as
# keyword
$dryrun typeset 'hash[$key]=1'
read 'hash[$key]'
let 'hash[$key] = 1' # yes, it works despite the single quotes
# and is actually safe it seems
unset 'hash[$key]' # unsets the element of key $key (literally)
(see also
https://unix.stackexchange.com/questions/627474/how-to-use-associative-arrays-safely-inside-arithmetic-expressions/627475#627475)
Parsing rules are different because we are in different
contexts. For unset hash[$key] or unset hash[(e)*] to treat
those as associative array lvalue, and not globs, it would need
to be a reserved word, like typeset above.
But, yes I agree it's all very messy.
> Instead, we could have a builtin that takes two separate
> arguments, as in «foo hash $key» (and «foo hash ''» to unset the element
> whose key is the empty string).
>
> Makes sense?
[...]
I suggested:
unset -k "$key" hash
for that.
--
Stephane
Messages sorted by:
Reverse Date,
Date,
Thread,
Author