bug-bash
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [BUG] Associative array initial reference name is made available in


From: Top Dawn
Subject: Re: [BUG] Associative array initial reference name is made available in another context
Date: Sun, 2 Jul 2023 15:04:25 +0200

>
> What makes you think so? Variables are always visible in invoked
> functions, unless you shadow them using local/declare/typeset.
>

Thank you very much for this information, I didn't know invoked functions
inherited their parent functions variables.
I understand better now the use of declare -n "reference", to make a copy
of the referenced variable.

Best,


On Sat, Jul 1, 2023 at 10:38 PM Lawrence Velázquez <vq@larryv.me> wrote:

> On Sat, Jul 1, 2023, at 3:55 PM, Top Dawn wrote:
> > I believe there is a bug with associative arrays, when once referenced in
> > another function through the -n option, both the new reference name and
> the
> > old one are made available.
> >
> > ```bash
> >
> > #!/bin/bash
> > function my_function(){
> >     declare -A my_array
> >     my_array=(["one"]="one")
> >     other_function "my_array"
> > }
> >
> > function other_function(){
> >     declare -n other_array="${1-}"
> >     echo "${other_array["one"]}"
> >     echo "${my_array["one"]}"
> > }
> >
> > my_function
> >
> > ```
> >
> > will output :
> >
> > ```bash
> >
> > one
> > one
> >
> > ```
> >
> > I believe this to be a bug.
>
> What makes you think so?  Variables are always visible in invoked
> functions, unless you shadow them using local/declare/typeset.
>
>         % cat /tmp/foo.bash; echo
>         function my_function(){
>             declare -A my_array
>             my_array=(["one"]="one")
>             other_function
>         }
>
>         function other_function(){
>             echo "${my_array["one"]}"
>         }
>
>         my_function
>
>         % bash /tmp/foo.bash
>         one
>
> --
> vq
>


reply via email to

[Prev in Thread] Current Thread [Next in Thread]