tech-userlevel archive
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]
Re: printf(1), sh(1), POSIX.2 and octal escape sequences
Le Wed, Jun 28, 2023 at 05:26:55PM +0200, Martin Husemann a écrit :
> On Wed, Jun 28, 2023 at 05:01:46PM +0200, tlaronde%polynum.com@localhost wrote:
> > But you can't: from the syntax given, \777 is a perfectly valid \77
> > octal sequence followed by the character '7'.
>
> No, from the Posix text you quoted it clearly is a three digit ocatl
> sequence, and its value is out of range.
Since you are not either an english native speaker, Would you mind
explaining me how you parse the POSIX sentence:
"\ddd", where ddd is a one, two, or three-digit octal number, shall be
written as a byte with the numeric value specified by the octal number."
? Because I parse it as: an octal escape sequence can be \d, or \dd or
\ddd; and the result is a byte value.
You seem to parse it as: an octal sequence is always three digit \ddd,
but translated in a "three digit" byte value; this doesn't make sense
for me, because if you specify that it is a byte, you specify the range
[0, 255], and the number of digits has nothing to do with it.
It this is your interpretation, this is not what printf(1) does:
$ printf '\11|\n'
|
$ printf '\74\n'
<
and you might try the BEL if your terminal supports it for a single
digit case. This is variable length. If printf doesn't take '|' or
'\n' because it can not be an octal, why would it take \777 that
can't be the value of a byte?
So why assume that an incorrect three digit octal should be interpreted
when a correct two digit octal followed by a character (that happens to
correspond, in ASCII, to a digit) is a valid string in this case?
--
Thierry Laronde <tlaronde +AT+ polynum +dot+ com>
http://www.kergis.com/
http://kertex.kergis.com/
Key fingerprint = 0FF7 E906 FBAF FE95 FD89 250D 52B1 AE95 6006 F40C
Home |
Main Index |
Thread Index |
Old Index