2023-08-31 15:02:22 -0500, Eric Blake via austin-group-l at The Open Group: [...] > The current POSIX says that %b was added so that on a non-XSI > system, you could do: > > my_echo() { > printf %b\\n "$*" > }
That is dependant on the current value of $IFS. You'd need: xsi_echo() ( IFS=' ' printf '%b\n' "$*" ) Or the other alternatives listed at https://unix.stackexchange.com/questions/65803/why-is-printf-better-than-echo/65819#65819 [...] > Bash already has shopt -s xpg_echo Note that in bash, you need both shopt -s xpg_echo set -o posix To get a XSI echo. Without the latter, options are still recognised. You can get a XSI echo without those options with: xsi_echo() { local IFS=' ' - set +o posix echo -e "$*\n\c" } The addition of those \n\c (noop) avoids arguments being treated as options if they start with -. [...] > The Austin Group also felt that standardizing bash's behavior of %q/%Q > for outputting quoted text, while too late for Issue 8, has a good > chance of success, even though C says %q is reserved for > standardization by C. Our reasoning there is that lots of libc over > the years have used %qi as a synonym for %lli, and C would be foolish > to burn %q for anything that does not match those semantics at the C > language level; which means it will likely never be claimed by C and > thus free for use by shell in the way that bash has already done. [...] Note that %q is from ksh93, not bash and is not portable across implementations and with most including bash's gives an output that is not safe for reinput in arbitrary locales (as it uses $'...' in some cases), not sure it's a good idea to add it to the standard, or at least it should come with fat warnings about the risk in using it. See also: https://unix.stackexchange.com/questions/379181/escape-a-variable-for-use-as-content-of-another-script/600214#600214 -- Stephane