On Tue, Jul 21, 2020 at 03:14:59PM +0300, M. Nejat AYDIN wrote:
> On 7/21/20 2:48 PM, Greg Wooledge wrote:
> > On Tue, Jul 21, 2020 at 10:55:06AM +0300, M. Nejat AYDIN wrote:
> > > Also, shouldn't the tilde be expanded following
> > > $ echo ~:
> > > ? The colon terminates tilde-prefix in an assignment, but there is no
> > > assignment involved here.
> >
> > Works for me.
> >
> > unicorn:~$ echo ~:
> > /home/greg:
> >
> > Also in POSIX mode.
> >
>
> Oops, I've misstated.
> I think the tilde in
> $ echo ~:
> shouldn't have been expanded and should have been printed verbatim:
> ~:
Tilde Expansion, according to POSIX:
A "tilde-prefix" consists of an unquoted character at the
beginning of a word, followed by all of the characters preceding the
first unquoted in the word, or all the characters in the word if
there is no . In an assignment (see XBD Variable Assignment),
multiple tilde-prefixes can be used: at the beginning of the word
(that is, following the of the assignment), following
any unquoted , or both. A tilde-prefix in an assignment is
terminated by the first unquoted or . If none of the
characters in the tilde-prefix are quoted, the characters in the
tilde-prefix following the are treated as a possible login
name from the user database. [...]
If the system does not recognize the login name, the results are
undefined.
For the record, ksh does the same as bash. Dash leaves the tilde
unexpanded. Obviously, I am assuming that one does not have a user
named : (as that would be basically impossible on any unix that uses
an /etc/passwd file in the traditional format).
I have no objection to bash's decision here. I actually find it less
surprising than dash's decision, although both are rational ones.