On Sun, Mar 10, 2024, at 5:36 PM, Greg Wooledge wrote:
> Here it is in action.  "local -g" (or "declare -g") without an assignment
> in the same command definitely does things.
>
> hobbit:~$ f() { declare -g var; var=in_f; }
> hobbit:~$ unset -v var; f; declare -p var
> declare -- var="in_f"

This example appears to work the same without "declare -g":

        $ f() { var=in_f; }
        $ unset -v var; f; declare -p var
        declare -- var="in_f"

But you're right that it does have an effect.  I overlooked attributes:

        $ printvar() { printf '%s: <%s> <%s>\n' "$1" "$var" "${var@a}"; }
        $ x() { local var; y; printvar outer; }
        $ y() { local var; z; printvar inner; }
        $ z() { local -gu var; var=hello; printvar innermost; }
        $ x; printvar outermost
        innermost: <hello> <>
        inner: <hello> <>
        outer: <> <>
        outermost: <> <u>

-- 
vq

Reply via email to