The bug test suite in my modernish shell library exposed a bug in the
current bash development snapshot. As far as I've been able to trace,
the following bug was introduced by bash-snap-20170620 (commit
d7d836dfc55b937f463f601ba5117d6442053089).

I've been able to distil the following test case:

set -o posix
fn() {
        IFS= read junk </dev/null
        unset -v IFS
        [[ -v IFS ]] && echo BUG || echo ok
}
fn

Output: BUG (i.e.: IFS is still set)
Expected output: ok (i.e.: IFS was successfully unset)

"unset -v IFS" (or "unset IFS") is ignored under specific circumstances.
All the four circumstances of the test script seem to need to be present
to trigger the bug:
- the variable needs to be IFS and no other;
- POSIX mode needs to be active;
- it needs to be in a function;
- the 'read' command needs to be executed with an IFS assignment (and no
other command; even "IFS= builtin read junk </dev/null" does not trigger
the bug)

Repeating the "unset -v IFS" command is an effective workaround; it only
seems to fail the once.

- M.

Reply via email to