On 02/12/2018 10:03 AM, Clark Wang wrote:
On Mon, Feb 12, 2018 at 3:23 PM, Nikolai Kondrashov <[email protected] <mailto:[email protected]>> wrote:Take a look at these links: - http://wiki.bash-hackers.org/commands/builtin/unset <http://wiki.bash-hackers.org/commands/builtin/unset> - http://www.fvue.nl/wiki/Bash:_Passing_variables_by_reference <http://www.fvue.nl/wiki/Bash:_Passing_variables_by_reference> Thanks, Clark! However, I find it difficult to follow the explanation at the first link and even more difficult to connect it to this case. So I'm not sure I'm getting it right. Could you maybe explain what exactly happens in the code I posted? Your code: inner() { unset res if [[ $1 == "set" ]]; then res[0]="X" res[1]="Y" fi } outer() { local res= inner "$1" echo "res: ${res[@]}" } The "unset" in inner() actually unsets the "res" in outer() and the following assignment (to res[0] and res[1]) is actually assigning to the global var "res". And in outer(), after calling inner(), its local "res" is gone and it also referencing to the global var "res". With 2 "unset" commands, even the global "res" is unset.
Thank you, that explains it wonderfully. Sorry for being lazy and not figuring it out myself. Now I need to craft a fix :) Nick
