#   This program is free software: you can redistribute it and/or modify
#   it under the terms of the GNU General Public License as published by
#   the Free Software Foundation, either version 3 of the License, or
#   (at your option) any later version.
#
#   This program is distributed in the hope that it will be useful,
#   but WITHOUT ANY WARRANTY; without even the implied warranty of
#   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
#   GNU General Public License for more details.
#
#   You should have received a copy of the GNU General Public License
#   along with this program.  If not, see <http://www.gnu.org/licenses/>.
#
r=/; declare -n r ; unset r
declare -n r=/ ; unset -n r
declare -n r; r=/ ; unset -n r
declare -n r; declare r=/ ; unset -n r
declare -n r; for r in /; do :; done ; unset -n r
declare -n r; select r in /; do :; done <<< 1; echo x; echo $r ; unset -n r
declare -n r; ((r=0)) ; unset -n r
((r=0)); declare -n r ; unset -n r
r=/ declare -n r ; unset -n r
f() { declare -n r; }; r=/ f ; unset r
f() { echo $r; }; declare -n r; r=/ f ; unset -n r
declare -n r; : ${r:=/} ; unset -n r
declare -n r; exec {r}>/dev/null ; unset -n r
declare -n r; coproc r { :; }; echo $r ; unset r ; wait
declare -r RO=x; r=$RO; declare -n r; x=y; declare -n RO; RO=z; declare -p RO; echo "$RO"
s=/; declare -n r=s; declare -n s; echo $r ; unset -n r ; unset -n s
declare -n r=s; declare -n s; s=/ ; unset -n r; unset -n s
declare -n r; getopts x r -h ; unset r; unset -n r
declare -n r; mapfile r < /dev/null ; declare -p r; unset r ; unset -n r
mapfile r < /dev/null; declare -n r ; unset r ; unset -n r
declare -n r; printf -v r / ; unset -n r

declare -n r; r="" ; unset -n r
declare -n r="" ; unset -n r
declare -n r; : ${r=} ; unset -n r
declare -n r; printf -v r '' ; unset -n r
r=""; declare -n r ; unset -n r
export r

# coproc tests, since coproc sets and unsets variables
declare -r ROVAR=42
declare -p ROVAR; coproc ROVAR { :; }; wait; declare -p ROVAR

echo ${@:0}; coproc @ { :; }; wait ; echo ${@:0}

declare -n ref=x; coproc ref { :; }; wait ; declare -p ref
unset -n ref ; unset ref

declare -r RO RO_PID; coproc RO { :; }; declare -p RO_PID; wait; declare -p RO RO_PID

declare -r RO2=a; declare -n ref_PID=RO2; coproc ref { :; }; wait; declare -p RO2

unset x y
set -- one two three

y=2
typeset -n x=y
echo ${x}

unset -n x

typeset -n y
echo $y

unset -n y

typeset -n y
y=2
echo ${y}

declare -n foo=bar
echo ${!foo[2]}
echo ${!bar}
