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 <tilde> character at the beginning of a word, followed by all of the characters preceding the first unquoted <slash> in the word, or all the characters in the word if there is no <slash>. In an assignment (see XBD Variable Assignment), multiple tilde-prefixes can be used: at the beginning of the word (that is, following the <equals-sign> of the assignment), following any unquoted <colon>, or both. A tilde-prefix in an assignment is terminated by the first unquoted <colon> or <slash>. If none of the characters in the tilde-prefix are quoted, the characters in the tilde-prefix following the <tilde> 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.