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.

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    c...@case.edu    http://tiswww.cwru.edu/~chet/

Reply via email to