This is tricky. The documentation is If NAME is '-', the set of shell options is made local to the function in which 'local' is invoked: shell options changed using the 'set' builtin inside the function are restored to their original values when the function returns.
It does seem to mean that executing 'local -' causes the "original" values to be restored. I could argue that "original" in this context could mean either just before the "set" is executed or just as the funciton is entered, but both have the same result. The tricky part is this is *retrospective*, the options may have already been changed in this function invocation: And bash 5.1.0 doesn't do that: $ function a () { set -C ; local -; } $ echo $- bhimBHs $ a $ echo $- bhimBCHs $ The behavior of bash appears to be is "future changes in shell options using the 'set' builtin inside the current function invocation are restored to their prior values when the function returns". Dale