1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28
f() { local str=F g str } g() { local -n ref=$1 printf "%s " "$ref" ref=G } str=OUTSIDE; f printf "%s\n" "$str" unset -f f g unset str f() { local -a arr=(F); g arr; }; g() { local -n ref=$1; printf "%s " "${ref[0]}"; ref=(G); }; arr=(OUTSIDE); f; printf "%s\n" "${arr[0]}"