On Wed, 24 Apr 2024, at 4:34 PM, baldu...@units.it wrote: > hello > > Apologies if I am missing some blatant point here > > I have noticed a difference in behavior of bash-5.2.26 and > bash-5.3-alpha which isn't a problem of correctness, but may be wasn't > intentional(?) > > Given the scriptlett: > > ----8<---- > #!/bin/sh > set -x > > show () { > cat <<EOF > $1 > EOF > return 0 > } > > show " > 1 > 2 > 3 > " > exit 0 > ----8<---- > > for me the output is different for the 2 versions: > > bash-5.2.26 : bash-5.3-alpha : > ----8<---- ----8<---- > ##> ./scriptlett.sh ##> ./scriptlett.sh > + show ' + show $'\n1\n2\n3\n' > 1 + cat > 2 > 3 1 > ' 2 > + cat 3 > > 1 + return 0 > 2 + exit 0 > 3 ---->8---- > > + return 0 > + exit 0 > ---->8---- > > Note the difference in how the argument to the function is > output. In the case of bash-5.3-alpha the syntax of the argument is > correct (ie if I call the show function with $'\n1\n2\n3\n' everything > works as expected), but is less readable (and this is more so if the > argument is a long stretch of lines) > > For what I seem to understand, this might be related to: > > ----8<---- > b. Bash does a better job of preserving user-supplied quotes around a word > completion, instead of requoting it. > ---->8---- > ?
I don't think so. That appears to be referring to the behaviour of readline completion in an interactive shell. > > Of course, if the "new" behavior is intentional, I guess there will be > good reasons for it and apologize for the noise It's an interesting observation. I have noticed lately that bash has started to become more consistent in its quoting strategies. For instance, 5.2 changed the behaviour of declare -p, such that it sometimes employs a quoting strategy like that of the ${param@Q} form of expansion. $ var1=$'foo\nbar' var2=$'foo\rbar' $ declare -p BASH_VERSION var1 var2 declare -- BASH_VERSION="5.2.26(1)-release" declare -- var1=$'foo\nbar' declare -- var2=$'foo\rbar' $ var1=$'foo\nbar' var2=$'foo\rbar' $ declare -p BASH_VERSION var1 var2 declare -- BASH_VERSION="5.1.16(1)-release" declare -- var1="foo bar" bar"are -- var2="foo In my opinion, that demonstrates that the new approach is obviously superior. That is, the output of 5.2 there is vastly more legible to me; to make sense of the output of 5.1, I might have to rely on a utility such as od or hexdump. Put another way, this style of quoting is tremendously helpful for conveying strings that do not exclusively consist of graphemes. Anyway, it look as though the xtrace mode has been similar adjusted. -- Kerin Millar