[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/