[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: Tilde expansion in assignment-like context
From: |
Chet Ramey |
Subject: |
Re: Tilde expansion in assignment-like context |
Date: |
Mon, 6 Aug 2018 15:45:50 -0400 |
User-agent: |
Mozilla/5.0 (Macintosh; Intel Mac OS X 10.13; rv:52.0) Gecko/20100101 Thunderbird/52.9.1 |
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 chet@case.edu http://tiswww.cwru.edu/~chet/