On 2/26/18 4:31 AM, Robert Elz wrote: > Date: Mon, 12 Feb 2018 09:26:37 -0500 > From: Chet Ramey <chet.ra...@case.edu> > Message-ID: <790ade74-690f-541c-9ab4-635991744...@case.edu> > > | This is bash's dynamic scoping. The visibility of a local variable is > | restricted to a function and its children, and `unset' removes the > | currently-visible instance. Removing such an instance can `unconver' an > | instance in a previous scope. > > Frankly this is brain dead, unset should not be unlocal (or something equiv) > > eg: if I have a func > > myfunc() { > local IFS > unset IFS > # do some code > } > > the very last thing that I want is for the global IFS to apply.
It doesn't. Run the following script: func() { local var=$'a\tb\tc' typeset IFS=' ' echo ${FUNCNAME}: before unset: $var unset IFS echo ${IFS:-null or unset} echo ${FUNCNAME}: after unset: $var } IFS='%' declare -p IFS func declare -p IFS You'll see that the first expansion of `$var' uses the local value of IFS, the second expansion uses the default value of $' \t\n', and the global value doesn't change (or get unset) outside the function. The objection was that the global or previous-scope value didn't get unset when using the `unset' builtin; only in the local scope was it unset. -- ``The lyf so short, the craft so long to lerne.'' - Chaucer ``Ars longa, vita brevis'' - Hippocrates Chet Ramey, UTech, CWRU c...@case.edu http://tiswww.cwru.edu/~chet/