On Mon, Jan 05, 2015 at 03:25:56PM -0500, Greg Wooledge wrote: > On Mon, Jan 05, 2015 at 01:14:53PM -0700, Poor Yorick wrote: > > It's nice to be able to create a function like unlocal that moves > > local > > variables out of the way, but I'm wondering if it can be relied on in > > future > > versions: > > Chet can give the authoritative answer about future directions, but I find > it fascinating that you seem to have re-invented (part of) Freddy Vulto's > upvar suite: > > http://www.fvue.nl/wiki/Bash:_Passing_variables_by_reference
That link seems to be dead, but I got the concept from "Passing variables by reference conflicts with local", Freddy Vulto, et al, 2010-04-30: http://lists.gnu.org/archive/html/bug-bash/2010-05/msg00000.html My use case is for a function to call a function that sources a script, without any danger of variable assignments in the sourced script getting intercepted by local variables, so I came up with this pattern: f1 () { local a b c #do stuff with local variables set -- "$a" "$b" "$c" "$item" #nope, this doesn't work because it doesn't list local variables that #are currently undefined #unlocal $(locals) unlocal a b c item function_that_sources_something local a="$1" b="$2" c="$3" item="4" #do more stuff with local variables } Maybe someday bash will grow upvar and uplevel commands, a-la Tcl. Or maybe people will just quit trying to write Tcl code in Bash ;) -- Yorick