On Fri, May 30, 2025, at 3:36 AM, Martin Schulte wrote:
> https://www.gnu.org/software/bash/manual/bash.html#Bash-POSIX-Mode says:
>
> 19. Literal tildes that appear as the first character in elements of 
> the PATH variable are not expanded as described above under Tilde 
> Expansion.
>
> Is this no longer true from version 5.2 on?
>
> $ bash        --posix -c 'echo $BASH_VERSION; PATH=~/x:~/y; echo $PATH'
> 5.1.4(1)-release
> /home/schulte/x:~/y
> $ bash-5.2.37 --posix -c 'echo $BASH_VERSION; PATH=~/x:~/y; echo $PATH'
> 5.2.37(1)-release
> /home/schulte/x:/home/schulte/y

The excerpt you pulled from the manual is about tilde expansion
performed during PATH lookup, not as part of variable assignment.
That is, by default this works even though the new value of PATH
contains a literal tilde:

        $ mkdir -p ~/bin
        $ printf '%s\n' '#!/bin/sh' 'echo hi' >~/bin/hi
        $ chmod a+x ~/bin/hi
        $ PATH=\~/bin
        $ declare -p PATH
        declare -x PATH="~/bin"
        $ hi
        hi

But not in POSIX mode:

        $ set -o posix
        $ hash -r
        $ hi
        bash: hi: command not found

See this recent thread for a bit more:
https://lists.gnu.org/archive/html/bug-bash/2025-01/msg00114.html

Your example commands demonstrate something else.  The command

        PATH=~/foo:~/bar

has always assigned a value like '/myhome/foo:/myhome/bar', POSIX
mode or not.  This is broken in bash 5.1 POSIX mode unless patch
13 is applied:
https://lists.gnu.org/archive/html/bug-bash/2022-01/msg00008.html

-- 
vq

Reply via email to