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

Re: special characters in file names issue



On Fri, Nov 10, 2023, at 4:50 AM, Roman Perepelitsa wrote:
> Associative arrays in zsh are finicky when it comes to the content of
> their keys. The problem you are experiencing can be distilled to this:
>
>     % typeset -A dict
>     % key='('
>     % [[ -v dict[$key] ]]
>     zsh: invalid subscript
>
> There is no simple quoting that you can apply to $key here: (q), (b),
> etc. are all wrong. You could perhaps escape a specific list of
> characters ('(', '[', '{' but not '$' or '*') although my memory tells
> me that some keys cannot be made to work under `[[ -v ...]]` or
> `unset` no matter how you try to escape them. I could be wrong though.

Subscripted arguments to [[ -v ... ]] appear to undergo a second
round of expansions, so quoting "$key" itself should be sufficient.

	% typeset -A dict=('(' foo)
	% key='('
	% [[ -v dict[\$key] ]]; echo $?
	0
	% [[ -v dict['$key'] ]]; echo $?
	0
	% [[ -v 'dict[$key]' ]]; echo $?
	0

-- 
vq




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