one two three declare -n fee="flip" declare -n foo="bar" turning off nameref attribute on foo bar after +n foo bar = other one two one expect argv[1] = expect argv[1] = expect one expect one expect argv[1] = changevar: expect argv[1] = expect argv[1] = changevar: expect argv[1] = expect argv[1] = ./nameref.tests: line 106: foo: readonly variable ./nameref.tests: line 107: foo: readonly variable one one ./nameref.tests: line 119: foo: readonly variable ./nameref.tests: line 116: foo: readonly variable one abxde abxde one bar ./nameref2.sub: line 5: foo: readonly variable expect argv[1] = expect argv[1] = expect argv[1] = expect ./nameref3.sub: line 29: foo: invalid indirect expansion ./nameref3.sub: line 34: unset: bar: cannot unset: readonly variable expect two expect two three unset four 0 expect a b expect foo 1 3 5 7 9 9 1 3 42 7 9 1 3 42 7 9 9 1 3 44 7 9 unset expect argv[1] = expect argv[1] = argv[2] = argv[3] = argv[4] = argv[5] = 16 expect <4> 4 expect <4> 4 expect <4> 4 expect one expect one expect one expect four errors = 0 1 2 v1: 1 v2: 2 ref -> first, value: I am first ref -> second, value: I am in the middle ref -> third, value: I am last final state: ref -> third, value: I am last ref -> one, value: 1 ref -> two, value: 2 ref -> three, value: 3 final state: ref -> three, value: 3 ./nameref5.sub: line 56: unset: three: cannot unset: readonly variable ref -> one, value: 1 ref -> two, value: 2 ref -> three, value: 3 final state: ref -> three, value: 3 ./nameref6.sub: line 15: typeset: x: nameref variable self references not allowed ./nameref6.sub: line 18: typeset: x[3]: reference variable cannot be an array ./nameref6.sub: line 25: typeset: x: reference variable cannot be an array the -- 1 42 -- 0 y -- 0 2 -- 0 2 -- 0 y -- 0 bar unset ./nameref8.sub: line 16: typeset: warning: v: circular name reference ./nameref8.sub: line 16: warning: v: circular name reference ./nameref8.sub: line 18: warning: v: circular name reference inside inside: two outside: ./nameref8.sub: line 42: typeset: warning: x: circular name reference ./nameref8.sub: line 42: warning: x: circular name reference ./nameref8.sub: line 44: warning: x: circular name reference foo ./nameref8.sub: line 51: typeset: warning: v: circular name reference ./nameref8.sub: line 51: warning: v: circular name reference ./nameref8.sub: line 51: warning: v: circular name reference local ./nameref8.sub: line 60: typeset: v: nameref variable self references not allowed ./nameref8.sub: line 67: warning: x: circular name reference ./nameref8.sub: line 68: warning: x: circular name reference x = idx2 idX2 idx2 idX2 declare -n foo="x[\$zero]" 42 declare -a x=([0]="4") declare -n foo="x[\$(echo 0)]" 4 comsub x[i=0] comsub 4 comsub 4 comsub 4 declare -n foo="somevariable" ./nameref10.sub: line 51: typeset: somevariable: not found foo = declare -n foo="somevariable" declare -A somevariable=([jug]="brown" ) declare -n foo="somevariable" declare -A somevariable=([jug]="brown" ) declare -n foo="somevariable" ./nameref10.sub: line 62: typeset: somevariable: not found ./nameref10.sub: line 64: typeset: foo: not found ./nameref10.sub: line 64: typeset: somevariable: not found declare -n foo="bar" ./nameref10.sub: line 68: typeset: bar: not found declare -n foo="bar" ./nameref10.sub: line 70: typeset: bar: not found declare -n foo="bar" declare -i bar="8" 8 declare -n foo="bar" ./nameref10.sub: line 77: typeset: bar: not found ./nameref11.sub: line 14: declare: `/': invalid variable name for name reference ./nameref11.sub: line 15: declare: `/': invalid variable name for name reference ./nameref11.sub: line 16: `/': not a valid identifier ./nameref11.sub: line 17: declare: `/': not a valid identifier ./nameref11.sub: line 18: `/': not a valid identifier 1) / #? ./nameref11.sub: line 19: `/': not a valid identifier x ./nameref11.sub: line 20: ((: `0': not a valid identifier ./nameref11.sub: line 21: declare: `0': invalid variable name for name reference ./nameref11.sub: line 22: declare: `/': invalid variable name for name reference ./nameref11.sub: line 23: declare: `/': invalid variable name for name reference / ./nameref11.sub: line 25: `/': not a valid identifier ./nameref11.sub: line 26: exec: `10': not a valid identifier ./nameref11.sub: line 26: r: cannot assign fd to variable ./nameref11.sub: line 27: warning: r: removing nameref attribute 63 ./nameref11.sub: line 28: declare: RO: readonly variable ./nameref11.sub: line 28: RO: readonly variable ./nameref11.sub: line 29: declare: `/': invalid variable name for name reference / ./nameref11.sub: line 30: declare: `/': invalid variable name for name reference ./nameref11.sub: illegal option -- h ./nameref11.sub: line 31: getopts: `?': not a valid identifier ./nameref11.sub: line 32: warning: r: removing nameref attribute declare -a r=() ./nameref11.sub: line 33: declare: r: reference variable cannot be an array ./nameref11.sub: line 34: printf: `/': not a valid identifier ./nameref11.sub: line 36: `': not a valid identifier ./nameref11.sub: line 37: declare: `': not a valid identifier ./nameref11.sub: line 38: `': not a valid identifier ./nameref11.sub: line 39: printf: `': not a valid identifier ./nameref11.sub: line 40: declare: `': invalid variable name for name reference declare -r ROVAR="42" ./nameref11.sub: line 45: ROVAR: readonly variable ./nameref11.sub: line 45: ROVAR: cannot unset: readonly variable declare -r ROVAR="42" ./nameref11.sub ./nameref11.sub: line 47: `@': not a valid identifier ./nameref11.sub declare -n ref="x" ./nameref11.sub: line 52: RO: readonly variable declare -r RO_PID ./nameref11.sub: line 52: RO: cannot unset: readonly variable declare -r RO="x" ./nameref11.sub: line 52: declare: RO_PID: not found ./nameref11.sub: line 54: RO2: readonly variable declare -r RO2="a" 2 ./nameref11.sub: line 65: typeset: `2': invalid variable name for name reference 2 ./nameref11.sub: line 70: typeset: `2': invalid variable name for name reference 2 ./nameref11.sub: line 75: foo[2]: invalid indirect expansion ./nameref11.sub: line 76: bar: invalid indirect expansion ./nameref12.sub: line 19: declare: `/': invalid variable name for name reference ./nameref12.sub: line 22: declare: `%': invalid variable name for name reference ./nameref12.sub: line 26: `^': not a valid identifier declare -n r declare -a foo declare -a foo=([0]="7") ./nameref12.sub: line 39: declare: `42': not a valid identifier ./nameref12.sub: line 40: declare: x: not found declare -nr RO="foo" / ./nameref12.sub: line 58: declare: `7*6': not a valid identifier ./nameref12.sub: line 58: declare: foo: not found ./nameref12.sub: line 60: `7*6': not a valid identifier declare -n ref="var" declare -n ref="var" ./nameref12.sub: line 87: readonly: `var[0]': not a valid identifier declare -- var="foo" declare -r var2="foo" declare -n ref="var" declare -a var=([0]="foo") ./nameref12.sub: line 104: `': not a valid identifier declare -n ref declare -- ref="global" declare -a var=([0]="foo2") ./nameref12.sub: line 113: declare: global: not found declare -- a declare -n r="a" declare -- a declare -n r="a" 0 declare -n r="P" declare -n ref="var" declare -- a declare -n r="a" 0 declare -n r declare -n r ./nameref13.sub: line 101: typeset: `12345': invalid variable name for name reference declare -n foo ./nameref13.sub: line 110: typeset: `12345': invalid variable name for name reference declare -n foo declare -nx ref="var" var var var var foo foo foo foo before declare -n ref="var" ./nameref14.sub: line 36: typeset: var: not found first declare -n ref="var" declare -x var="xxx" invalid declare -n ref="var" declare -x var="5" after declare -n ref="var" ./nameref14.sub: line 45: typeset: var: not found declare -n ref="var" ./nameref15.sub: line 14: local: warning: a: circular name reference ./nameref15.sub: line 14: warning: a: circular name reference ./nameref15.sub: line 14: `a[0]': not a valid identifier declare -a a=([0]="0") ./nameref15.sub: line 14: local: warning: a: circular name reference ./nameref15.sub: line 14: warning: a: circular name reference ./nameref15.sub: line 14: warning: a: circular name reference declare -a a=([0]="X") declare -a b=([0]="X") ./nameref15.sub: line 14: local: warning: a: circular name reference ./nameref15.sub: line 14: warning: a: circular name reference ./nameref15.sub: line 14: `a[0]': not a valid identifier declare -a b=([0]="0") ./nameref15.sub: line 32: typeset: warning: ref: circular name reference ./nameref15.sub: line 32: warning: ref: circular name reference ./nameref15.sub: line 33: warning: ref: circular name reference ./nameref15.sub: line 34: warning: ref: circular name reference inside X outside X before: 7 ./nameref15.sub: line 45: typeset: warning: xxx: circular name reference ./nameref15.sub: line 45: warning: xxx: circular name reference ./nameref15.sub: line 46: warning: xxx: circular name reference declare -n xxx="xxx" ./nameref15.sub: line 48: warning: xxx: circular name reference xxx_func: inside: xxx = foo after: foo ./nameref15.sub: line 59: typeset: ref: nameref variable self references not allowed ./nameref15.sub: line 61: ref: nameref variable self references not allowed declare -n ref="re" declare -n ref="re" declare -- re="4" 4 declare -n foo="var[@]" declare -n ref="var[@]" ./nameref15.sub: line 78: var[@]: bad array subscript declare -n bar="var[@]" ./nameref15.sub: line 83: var[@]: bad array subscript declare -n a="b" declare -n b="a[1]" ./nameref15.sub: line 91: warning: a: removing nameref attribute declare -a a=([1]="foo") declare -n b="a[1]" ./nameref15.sub: line 96: warning: a: removing nameref attribute declare -a a=([1]="foo") declare -n b="a[1]" declare -n n="v" declare -a v=([1]="1") ./nameref15.sub: line 112: typeset: n: not found declare -a v=([0]="0" [1]="1") declare -n n="v[1]" declare -a v=([0]="0") ./nameref15.sub: line 120: warning: xref: removing nameref attribute declare -a xref=([1]="one") ./nameref15.sub: line 126: warning: xref: removing nameref attribute declare -a xref=([1]="one") declare -n r1="y" declare -n r2="x" ./nameref16.sub: line 25: typeset: x: not found ./nameref16.sub: line 25: typeset: y: not found declare -n r1="y" declare -n r2="x" ./nameref16.sub: line 34: typeset: x: not found ./nameref16.sub: line 34: typeset: y: not found declare -n r1="y" declare -n r2="x" ./nameref16.sub: line 46: typeset: x: not found ./nameref16.sub: line 46: typeset: y: not found declare -n r1="y" declare -n r2="x" declare -- x="one" declare -- y="two" ./nameref17.sub: line 21: declare: bar: not found ./nameref17.sub: line 22: unset: foo0: cannot unset: readonly variable declare -nr foo0="bar" declare -nr foo0="bar" declare -- bar ./nameref17.sub: line 27: declare: foo0: readonly variable ./nameref17.sub: line 28: declare: foo0: readonly variable declare -nr foo1 ./nameref17.sub: line 37: typeset: foo1: readonly variable declare -nr foo1 declare -n foo2="bar" declare -r bar ./nameref17.sub: line 48: bar: readonly variable ./nameref17.sub: line 49: typeset: bar: readonly variable declare -n foo2="bar" declare -r bar declare -- bar3="three" ./nameref17.sub: line 59: unset: foo3: cannot unset: readonly variable ./nameref17.sub: line 62: declare: bar3: readonly variable declare -nr foo3="bar3" declare -r bar3="three" ./nameref17.sub: line 64: declare: foo3: readonly variable declare -nr foo4="bar4" declare -- bar4="four" ./nameref17.sub: line 76: typeset: foo4: readonly variable declare -nr foo4="bar4" declare -nr foo4="bar4" declare -- bar4="four" ./nameref17.sub: line 92: typeset: foo4: readonly variable declare -nr foo4="bar4" declare -nr foo4="bar4" declare -- bar4="four" declare -nr foo5 declare -r foo5 declare -nr foo5 declare -r foo5 ./nameref18.sub: line 15: mapfile: `XXX[0]': not a valid identifier ./nameref18.sub: line 16: declare: XXX[0]: not found ./nameref18.sub: line 22: `XXX[0]': not a valid identifier ./nameref18.sub: line 23: declare: XXX[0]: not found declare -n ref="XXX[0]" declare -a XXX=([0]="4") ./nameref18.sub: line 37: `XXX[0]': not a valid identifier declare -n ref="XXX[0]" ./nameref18.sub: line 38: declare: XXX[0]: not found ./nameref18.sub: line 42: read: `XXX[0]': not a valid identifier ./nameref18.sub: line 43: declare: XXX[0]: not found ./nameref18.sub: line 48: `XXX[0]': not a valid identifier declare -n ref="XXX[0]" ./nameref18.sub: line 51: `XXX[0]': not a valid identifier ./nameref18.sub: line 51: declare: XXX[0]: not found declare -n ref="var[123]" ./nameref18.sub: line 59: declare: var[123]: not found declare -a var=([123]="") declare -n ref="var[123]" ./nameref18.sub: line 63: declare: var[123]: not found declare -a var=([123]="") declare -n ref="var[123]" ./nameref18.sub: line 67: declare: var[123]: not found declare -a var=([123]="X") argv[1] = <1> argv[2] = <2> argv[3] = <3> argv[1] = <1> argv[2] = <2> argv[3] = <3> argv[1] = <1> argv[2] = <2> argv[3] = <3> argv[1] = <1> argv[2] = <2> argv[3] = <3> argv[1] = <1> argv[2] = <2> argv[3] = <31> argv[4] = <2> argv[5] = <3> declare -n foo="bar" declare -- foo="bar" ./nameref19.sub: line 22: declare: bar: not found declare -n foo="bar" declare -- foo="bar" declare -i bar="11" declare -inx foo6 declare -ix foo6 declare -n foo="bar" declare -- bar="Hello World!" declare -- foo="bar" declare -- bar="Hello World!" declare -n foo="bar" declare -- bar declare -- foo="bar" declare -- bar 8 declare -n ivar="foo" declare -a v=([0]="Y") r: v: declare -n ref="var" declare -a var=([0]="X") declare -n ref="var" declare -a var=([0]="X") declare -n ref="var" ./nameref20.sub: line 36: declare: var: not found outside: declare -a foo=([0]="X") declare -n ref="var" declare -a var=([0]="X") outside: ./nameref20.sub: line 51: declare: ref: not found ./nameref20.sub: line 51: declare: var: not found declare -n ref="var" declare -- var="X" outside: ./nameref20.sub: line 58: declare: ref: not found ./nameref20.sub: line 58: declare: var: not found declare -n ref="var" declare -a var=([0]="Y") declare -- ref="Y" declare -- var="X" declare -- ref="Y" declare -- ref="Y" ./nameref20.sub: line 74: declare: var: not found declare -- ref="Y" declare -n ref="var" declare -A var=([2]="" ) declare -n ref="var" declare -A var=([2]="" ) declare -n ref="var" declare -a var=([2]="") declare -n ref="var" declare -a var=([2]="") declare -n ref="var" declare -ai var=([1]="0") declare -n ref="var" declare -ai var=([1]="0") declare -n ref="var" declare -- var="1" a string with spaces many spaces declare -n foo="bar[0]" declare -a bar=([0]=" still more spaces") declare -n foo="bar[0]" declare -a bar=([0]="spaces still more spaces") ./nameref22.sub: line 50: declare: array: reference variable cannot be an array ./nameref22.sub: line 53: declare: array[128]: reference variable cannot be an array declare -a array=([0]="one" [1]="two" [2]="three") declare -- array="(one two three)" declare -a array=([0]="one" [1]="two" [2]="three") ./nameref22.sub: line 69: declare: `(one two three)': invalid variable name for name reference ./nameref22.sub: line 70: declare: array: reference variable cannot be an array declare -a array=([0]="zero") ./nameref22.sub: line 74: declare: array: reference variable cannot be an array declare -a array=([0]="one" [1]="two" [2]="three") ./nameref22.sub: line 79: declare: array: reference variable cannot be an array declare -a array declare -ai array=([0]="one") declare -a array=([0]="zero") declare -a array=([0]="one" [1]="two" [2]="three") declare -ai a=([0]="5") declare -ai a=([0]="6") declare -ai a=([0]="1") ./nameref23.sub: line 15: declare: b: not found declare -ai a=([0]="1") declare -- b="1" declare -ai a=([0]="1") declare -- b="11" declare -ai a=([0]="1") declare -- b="110" ./nameref23.sub: line 25: declare: `1': invalid variable name for name reference declare -ai a=([0]="1") ./nameref23.sub: line 27: declare: b: not found declare -ai a=([0]="4") declare -in b="a[0]" declare -ai a=([0]="6") declare -in b="a[0]" foo foo bar declare -a a=([0]="" [1]="foo bar") declare -n b="a[1]" foo foo bar declare -a a=([0]="" [1]="foo bar") declare -n b="a[1]" 12 16 declare -ai a=([0]="0" [1]="16") 12 16 declare -ai a=([0]="0" [1]="16")