2 Ağustos 2020 Pazar tarihinde Lawrence Velázquez <v...@larryv.me> yazdı:
> > On Aug 2, 2020, at 2:51 AM, Oğuz <oguzismailuy...@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