> > 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 <v...@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 >