bug-bash
[Top][All Lists]
Advanced

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

Re: Assigning to multiple variables on same line


From: Chet Ramey
Subject: Re: Assigning to multiple variables on same line
Date: Thu, 13 Aug 2009 11:43:11 -0400

> On Thu, Aug 13, 2009 at 02:45:51AM -0400, Mike Frysinger wrote:
> > i dont think word expansion occurs first, otherwise wouldnt this break:
> > foo() {
> >     unset b c
> >     f="a b="
> >     local a=$f c=
> 
> As I understand it, this is what happens:
> 
> 1) The parser separates out the tokens that constitute the command.  These
>    are `local', `a=$f', and `c='.  The meaning of each token is determined.
> 
> 2) Parameter expansion is performed on the $f.  But this can't create a
>    new token.  It's too late for that.  The whitespace becomes part of
>    the second token.  (If you wanted a new token, you'd have to use eval.)

Close.  Bash treats assignment statement arguments to certain builtins
(typeset/declare/export/readonly/local) differently by inhibiting word
splitting after expansion, so the word expansions performed are closer
to those performed on an assignment statement.  This has been controversial,
but reduces user surprise.

Everything else you wrote is pretty much correct.

Chet

-- 
``The lyf so short, the craft so long to lerne.'' - Chaucer

Chet Ramey, ITS, CWRU    chet@case.edu    http://tiswww.tis.case.edu/~chet/




reply via email to

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