On Thu, Mar 14, 2024 at 9:54 AM Greg Wooledge <g...@wooledge.org> wrote: > > I don't quite understand what this is saying. Do the variables have > different names, or the same name? If they have different names, then > the nameref shouldn't "hide" the other variable. But they can't have > the same name, because a nameref pointing to itself is a circular > reference and won't ever work under any circumstance. > > hobbit:~$ f() { local -n var=var; var=1; }; f > bash: local: warning: var: circular name reference > bash: warning: var: circular name reference > bash: warning: var: circular name reference > > You don't even need an outer calling function to see this. >
Editing things out of my original email to focus on this point: On Sun, Mar 10, 2024 at 7:29 PM Zachary Santer <zsan...@gmail.com> wrote: > > $ cat ./nameref-what > #!/usr/bin/env bash > > func_1 () { > local var_3='EGG' > func_2 > printf '%s\n' "func_1:" > local -p var_3 > } > > func_2 () { > local -n nameref_3='var_3' > nameref_3='soufflé' > local var_4='GROUND BEEF' > local -n nameref_4='var_4' > local -l nameref_4 > printf '%s\n' "func_2:" > local -p nameref_3 > local -p var_3 > local -p nameref_4 > local -p var_4 > } > > func_1 > > $ ./nameref-what > func_2: > declare -n nameref_3="var_3" > ./nameref-what: line 31: local: var_3: not found > declare -n nameref_4="var_4" > declare -l var_4="GROUND BEEF" > func_1: > declare -- var_3="soufflé" Not on a machine with bash right now. 'declare -p var_3' in func_2 () said var_3 was not found, despite it having just been set by assigning a value to the nameref variable nameref_3.