bug-bash
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: set -u not working as expected


From: Oğuz
Subject: Re: set -u not working as expected
Date: Sun, 2 Aug 2020 11:01:02 +0300

2 Ağustos 2020 Pazar tarihinde Lawrence Velázquez <vq@larryv.me> yazdı:

> > On Aug 2, 2020, at 2:51 AM, Oğuz <oguzismailuysal@gmail.com> wrote:
> >
> > `u' has no members, so there's nothing to expand. If you use `${u[0]}'
> for
> > example, you'll see an error, I think how bash and ksh behave is
> perfectly
> > reasonable.
>
> Agreed. Their behavior logically follows from POSIX's carveout for $@.
>
> >> % bash -c 'set -u; typeset -i v; printf "<%s>\\n" "$v"'
> >> bash: v: unbound variable
> >> % ksh -c 'set -u; typeset -i v; printf "<%s>\\n" "$v"'
> >> ksh: v: parameter not set
> >> % zsh -c 'set -u; typeset -i v; printf "<%s>\\n" "$v"'
> >> <0>
> >>
> >>
> > `typeset -i v' doesn't assign `v', just gives it the integer attribute.
> > Again, I can't see any problem with bash and ksh here.
>
> Also agreed, but I was more interested in the next part...
>
> >> % bash -c 'set -u; typeset -i v; v+=1; printf "<%s>\\n" "$v"'
> >> <1>
> >> % ksh -c 'set -u; typeset -i v; v+=1; printf "<%s>\\n" "$v"'
> >> <1>
> >> % zsh -c 'set -u; typeset -i v; v+=1; printf "<%s>\\n" "$v"'
> >> <1>
>
> ...which contrasts with the behavior of let. Someone else will have
> to explain this, as I don't know what to make of it.
>
>
Yeah, that's interesting. See this one:

    $ set -u
    $ unset foo bar
    $ typeset -i foo bar
    $
    $ foo+=foo+1
    $
    $ foo+=bar+1
    bash: bar: unbound variable

Only referencing `bar' triggers the _unbound variable_ error, it makes
sense that the name being assigned is immune to that.

Concerning `let v+=1', let is not a declaration utility, it's arguments are
arithmetic expressions to be evaluated. And in arithmetic evaluation
context:

> Shell variables are allowed as operands; parameter expansion
> is performed before the expression is evaluated.


> vq



-- 
Oğuz


reply via email to

[Prev in Thread] Current Thread [Next in Thread]