Thread (6 messages) 6 messages, 3 authors, 2023-06-13

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)

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.
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help