Re: [PATCH] CodingGuidelines: use octal escapes, not hex
From: Eric Sunshine <hidden>
Date: 2023-06-13 19:15:31
Possibly related (same subject, not in this thread)
- 2023-06-13 · Re: [PATCH] CodingGuidelines: use octal escapes, not hex · Junio C Hamano <hidden>
On Tue, Jun 13, 2023 at 2:43 PM Jonathan Tan [off-list ref] wrote:
Eric Sunshine [off-list ref] writes:quoted
On Tue, Jun 13, 2023 at 1:44 PM Jonathan Tan [off-list ref] wrote:quoted
+ - Use octal escape sequences (e.g. "\302\242"), not hexadecimal (e.g. + "\xc2\xa2"), as the latter is not portable.The shell itself doesn't interpret these sequences, so this description feels too generic. Perhaps it would make more sense to cite specific tools for which octal sequences are needed for portability reasons, such as `printf`, `sed`, `tr`, etc.Ah...good point. I checked with "echo" in "dash" and assumed that it was "dash" that was interpreting the escapes, but indeed it is the "echo" (and "printf") builtins in "dash" that are actually interpreting them. What do you think of the following in the commit message: Hexadecimal escapes in shell scripts are not portable across shell builtins (in particular, the "printf" of "dash" does not support them). Write in the CodingGuidelines document that we should be using octal escapes instead. and in the CodingGuidelines doc: + - Use octal escape sequences (e.g. "\302\242"), not hexadecimal (e.g. + "\xc2\xa2"), as the latter is not portable across some shell builtins like printf.
The portability concern is not specific to a certain shell or whether
a command is builtin, so it feels misleading to single out "dash" and
builtins. The same portability problems can crop up, as well, with
older (non-"dash") shells, and with commands which may or may not be
builtins (such as "echo" which, historically, was not always a
builtin), and non-builtins commands, such as "sed" and "tr".
So, for the commit message, perhaps simply:
Extend the shell-scripting section of CodingGuidelines to suggest
octal escape sequences (e.g. "\302\242") over hexadecimal
(e.g. "\xc2\xa2") since the latter can be a source of portability
problems.
As for the change to CodingGuidelines, this would probably be sufficient:
Use octal escape sequences (e.g. "\302\242"), not hexadecimal
(e.g. "\xc2\xa2"), since the latter is not portable across some
commands, such as `printf`, `sed`, `tr`, etc.