On Mon, Jan 29, 2018 at 23:33:25 +0700, Robert Elz wrote: > From: u...@stderr.spb.ru (Valery Ushakov) > Subject: Re: Add static local vars to sh(1) ? > Date: Mon, 29 Jan 2018 13:38:25 +0000 (UTC) > > | This doesn't seem to mention what happens when the > | function is called recursively. [...] > | I assume it does the right thing, > > In considering what the right thing is, please remember that sh is > not C, its language is not C, and most especially, its variables > are nothing like what exists in C (or other declarative programming > languages). > > In particular, a static variable in sh will not (and cannot) > be private to a function, the way it would be in C. [...] > Then local -S causes any of that init to only happen when the func > is executed the first time (really, when the "local -S" is executed in > this func for the very first time). After that you get whatever value > the variable (the version of it available in this function after the > local command) last had. It is essentially inherited from itself. > Changing the var init on local that way, and arranging to preserve > the return time value of a static local, so it is not lost like a > normal local var's value would be, is really all that is happening here. > > kre > > ps: given everything in sh is dynamic, defining functions, and > the local command included, and you can achieve some truly > bizarre effects by exploiting that if so inclined. Eg: by > only sometimes making a var static in the function... > > And lastly, apologies for being too classroomish, expecially > given I know that most of you know all of this already.
Thanks for the master-class :) So "local" is like in lisp using LET on a dynamically scoped (aka special) variable. I never ventured into that particular deep end of shell scripting. Thanks again for the clarification. -uwe