bug-bash
[Top][All Lists]
Advanced

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

Re: variable assignments and parameter expansion in a single command


From: Chet Ramey
Subject: Re: variable assignments and parameter expansion in a single command
Date: Sun, 20 May 2007 16:43:54 -0400
User-agent: Thunderbird 2.0.0.0 (Macintosh/20070326)

Kevin F. Quinn wrote:
> Following a discussion we had earlier this year regarding the order of
> evaluation of variables and variable assignments:
> 
>  $ A="moo" B="$A more" env |grep ^B
>  B=moo more
> 
> (rather than showing just 'B= more')
> the dash maintainer has highlighted the following:
> 
> 
>  $ bash -c 'K=dvb0.net0 A=${K#dvb} eval echo \$A'

This is a bug in bash.  There are certain circumstances where the
expansion of A will refer to the wrong version of $K.  It's state-
dependent, so it's been missed so far.  I fixed it today.

In general, expansions of assignment statements destined for the
temporary environment should check for variables in the temporary
environment before the normal shell variable table.  That preserves
the left-to-right processing order.

>  $ bash -c 'a=/bin PATH=$a ls /dev/null'
>  bash: line 1: ls: No such file or directory

This is the same problem as the first case.

>  $ bash -c 'x=${K:=dvb0.net0} A=${K#dvb} echo $A'

This behaves correctly.

Chet
-- 
``The lyf so short, the craft so long to lerne.'' - Chaucer
                       Live Strong.  No day but today.
Chet Ramey, ITS, CWRU    chet@case.edu    http://cnswww.cns.cwru.edu/~chet/




reply via email to

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