On Fri, Mar 07, 2014 at 05:21:53PM +0100, Lars Wendler wrote: > Configuration Information > [Automatically generated, do not change]: > Machine: x86_64 > OS: linux-gnu > Compiler: x86_64-pc-linux-gnu-gcc > Compilation CFLAGS: -DPROGRAM='bash' -DCONF_HOSTTYPE='x86_64' > -DCONF_OSTYPE='linux-gnu' -DCONF_MACHTYPE='x86_64-pc-linux-gnu' > -DCONF_VENDOR='pc' -DLOCALEDIR='/usr/share/locale' -DPACKAGE='bash' -DSHELL > -DHAVE_CONFIG_H -I. -I./include -I. -I./include -I./lib > -DDEFAULT_PATH_VALUE='/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin' > -DSTANDARD_UTILS_PATH='/bin:/usr/bin:/sbin:/usr/sbin' > -DSYS_BASHRC='/etc/bash/bashrc' -DSYS_BASH_LOGOUT='/etc/bash/bash_logout' > -DNON_INTERACTIVE_LOGIN_SHELLS -DSSH_SOURCE_BASHRC -march=barcelona > -mtune=barcelona -O2 -pipe > uname output: Linux shanghai 3.12.13 #2 SMP PREEMPT Wed Mar 5 17:26:09 CET > 2014 x86_64 Quad-Core AMD Opteron(tm) Processor 2389 AuthenticAMD GNU/Linux > Machine Type: x86_64-pc-linux-gnu > > Bash Version: 4.3 > Patch Level: 0 > Release Status: release > > Description: > > bash-4.3 seems to expand a "~" (tilde character) with full homepath in a > pattern substitution even when the variable is embraced by double quotes. > > Repeat-By: > > replace_with_tilde() { P="foo_bar" ; echo ${P/_/~} ; echo "${P/_/~}" ; } > > > bash-4.2.45: > > ~% replace_with_tilde > foo/home/polynomial-cbar > foo~bar > > > bash-4.3.0: > > ~% replace_with_tilde > foo/home/polynomial-cbar > foo/home/polynomial-cbar
(1) You're not quoting it right: dualbus@debian:~$ for shell in /bin/bash ~/local/bin/bash; do "$shell" -c 'p=foo_bar; echo "${p/_/\~} $BASH_VERSION"'; done foo\~bar 4.2.37(1)-release foo~bar 4.3.0(2)-release (2) In fact, this change in 4.3 is a fix to an old (and a bit weird) behavior, see: - http://lists.gnu.org/archive/html/bug-bash/2012-02/msg00106.html - http://lists.gnu.org/archive/html/bug-bash/2013-03/msg00099.html If you want the old behavior: dualbus@debian:~$ ~/local/bin/bash -c 'shopt -s compat42; p=foo_bar; echo "${p/_/\~} $BASH_VERSION"' foo\~bar 4.3.0(2)-release -- Eduardo Alan Bustamante López