bug-bash
[Top][All Lists]
Advanced

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

Re: Tilde expansion in assignment-like context


From: Clint Hepner
Subject: Re: Tilde expansion in assignment-like context
Date: Mon, 6 Aug 2018 16:04:32 -0400

> On 2018 Aug 6 , at 3:45 p, Chet Ramey <chet.ramey@case.edu> wrote:
> 
> On 8/6/18 3:09 PM, Clint Hepner wrote:
> 
>> Bash Version: 4.4
>> Patch Level: 19
>> Release Status: release
>> 
>> Description:
>>        A non-initial unquoted tilde is expanded outside of an assignment. 
>> This
>>        was raised as a question on Stack Overflow, 
>> https://stackoverflow.com/q/51713759/1126841.
>> 
>> Repeat-By:
>> 
>>        $ set +k
>>        $ echo home_dir=~
>>        home_dir=/Users/chepner
> 
> Yes. Bash has done this since its earliest days. A word that looks like an
> assignment statement has tilde expansion performed after unquoted =~ and :~
> no matter where it appears on the command line. This makes things like
> 
>       make DESTDIR=~stager/bash-install
> or
>       export PATH=/usr/local/bin:~/bin:/usr/bin
> 
> easy and convenient.

Oh, right. For some reason, I had it in my head that this was only intended
for builtins like export, and that their status as builtins somehow made
the argument be treated as an assignment. I hadn't thought at all about 
non-builtin
commands like make.

> 
> The first version I can find that implemented the =~ and :~ tilde expansion
> prefixes is bash-1.10 (1991). Those early versions would have expanded
> something like `--home_dir=~'. The first version that restricted it to
> words that satisfied the assignment statement restrictions is bash-2.0
> (1996).
> 
> Bash doesn't do this when it's in posix mode. The first version that
> implemented that was bash-1.14.0.
> 
> -- 
> ``The lyf so short, the craft so long to lerne.'' - Chaucer
>                ``Ars longa, vita brevis'' - Hippocrates
> Chet Ramey, UTech, CWRU    chet@case.edu    http://tiswww.cwru.edu/~chet/




reply via email to

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