zparseopts con matriz asociativa en la versión anterior de zsh

Estoy confundido por el comportamiento diferente de zparseopts en dos versiones diferentes de zsh. Básicamente, estoy tratando de establecer una list de valores de opciones pnetworkingeterminadas en una matriz asociativa y sobrescribir estos valores pnetworkingeterminados con cualquier opción especificada en la command-line. El siguiente código funciona bien para zsh 5.0.6 pero se comporta de manera extraña para 4.3.6 – específicamente, en zsh 4.3.6, toda mi matriz de valores pnetworkingeterminados se sobrescribe si se sobrescribe una sola tecla.

myscript

 typeset -A opts opts=( --opt1 a --opt2 b ) zparseopts -A opts -K -- -opt1: -opt2: echo ${(k)opts} 

Ejecutando el script

 $ myscript --opt1 --opt2 # both zsh 4.3.6 and 5.0.6 $ myscript --opt1 x --opt1 --opt2 # zsh 5.0.6; element of array is replaced --opt1 # zsh 4.3.6; adding an element overwrites the whole array, no more opt2 

Este comportamiento es confuso porque 4.3.6 y 5.0.6 tienen inputs idénticas para la opción -K de zparseopts :

-K Con esta opción, las matrices especificadas con las opciones -a y -A y con los formularios `= array 'se mantienen sin cambios cuando no se utiliza ninguna de las especificaciones para ellas. Esto les permite asignarles valores pnetworkingeterminados antes de llamar a zparseopts.

Reemplace la última línea de su script con echo ${(kv)opts} . Ejecutar con 4.3.6 y 5.0.6 debe mostrar que 4.3.6 interpreta -K para restablecer opts si se dan opciones, mientras que 5.0.6 solo restablece opts[--opt1] cuando --opt1 es usado (dejando --opt2 o cualquier otra input sola).

(Tenga en count que esto pareció cambiar en algún momento entre 5.0.2 y 5.0.6; es posible que desee solicitar en la list de correo de zsh-workers que lo confirme).