i still vote for same syntax to unset as setting it, makes only sense On Wed, Mar 31, 2021, 01:05 konsolebox <konsole...@gmail.com> wrote:
> On Tue, Mar 16, 2021 at 8:12 AM Chet Ramey <chet.ra...@case.edu> wrote: > > This means that, given the following script, > > > > declare -A a > > key='$(echo foo)' > > a[$key]=1 > > a['$key']=2 > > a["foo"]=3 > > > > # never worked > > unset -v a[$key] > > declare -p a > > > > # unsets element with key $key > > unset -v a['$key'] > > declare -p a > > > > # unsets element with key $(echo foo) > > unset -v a["$key"] > > declare -p a > > > > # unsets element with key foo > > eval unset -v a\["$key"\] > > declare -p a > > > > you'll get this output: > > > > example: line 8: unset: `a[$(echo': not a valid identifier > > example: line 8: unset: `foo)]': not a valid identifier > > declare -A a=(["\$(echo foo)"]="1" ["\$key"]="2" [foo]="3" ) > > declare -A a=(["\$(echo foo)"]="1" [foo]="3" ) > > declare -A a=([foo]="3" ) > > declare -A a=() > > As I've observed, in single expansion mode, unset will fail to unset a > value when the key has a closing bracket in it. Perhaps unset should > check the last character first when looking for the closing bracket. > Tested in 5.1.4. > > -- > konsolebox > >