On 10/21/24 12:15 AM, Zachary Santer wrote:
Item 8 is just odd and is on the verge of being a dealbreaker. Not to go off on another tangent, but what on Earth?AFAICT it's the non-POSIX-mode Bash behavior that is unusual. While all shells will have treat single quotes as literal here: $ V=set $ echo "${V+'x'}" 'x' Pretty much every other shell (and bash in posix mode) will continue to do so for: $ echo "${V+'x}" 'x ...while bash will treat this as an unterminated command. Because in bash, this is a weird kind of quoting, where the quotes are preserved but any } character within them loses its special meaning:
The original POSIX language dating from 1992, and through three editions, required an even number of single quotes, which made them semi-special: "Within the string of characters from an enclosed "${" to the matching '}', an even number of unescaped double-quotes or single-quotes, if any, shall occur." See https://www.austingroupbugs.net/view.php?id=221 for the results of the discussion that prompted this change. Most of the talking took place on the mailing list. Good times. This changed in 2010, by which we had over 20 years of the original behavior (and the interpretation was approved in 2010, but not in an issued version of the standard until 2016).
$ unset U $ (set +o posix; echo "${U+'}'y}") $ (set -o posix; echo "${U+'}'y}") 'y}I misinterpreted Item 8, then. POSIX file:8. When parsing and expanding a ${...} expansion that appears within double quotes, single quotes are no longer special and cannot be used to quote a closing brace or other special character, unless the operator is one of those defined to perform pattern removal. In this case, they do not have to appear as matched pairs.
https://pubs.opengroup.org/onlinepubs/9799919799/utilities/V3_chap02.html#tag_19_02_03 The current standard language says "substring processing." Bash can do whatever it wants with pattern substitution.
The nontrivial stuff I do is still being run by bash 4.2 at the moment, and I'm not willing to give up procsubs.
Probably something to take up with your distro (Red Hat/Centos, right?) -- ``The lyf so short, the craft so long to lerne.'' - Chaucer ``Ars longa, vita brevis'' - Hippocrates Chet Ramey, UTech, CWRU c...@case.edu http://tiswww.cwru.edu/~chet/
OpenPGP_signature.asc
Description: OpenPGP digital signature