Re: [PATCH v3 0/4] Changed path filter hash fix and version bump
- From
Junio C Hamano <gitster@pobox.com>
- Date
- Jun 13, 2023, 19:16 UTC
- Message-ID
- <xmqqa5x35g1e.fsf@gitster.g>
- In-Reply-To
- <20230613171634.15985-1-jonathantanmy@google.com>
Jonathan Tan <jonathantanmy@google.com> writes:
Show 11 quoted lines
>> + - In 'printf' format string, do not use hexadecimals, as they are not >> + portable. Write >> + >> + CENT=$(printf "\302\242") >> + >> + not >> + >> + CENT=$(printf "\xc2\xa2") > > I've checked with "dash" and this applies to any quoted string, not just > when passed to printf. I'll prepare a patch describing this.
What do you mean by "any quoted string"?
I think built-in 'echo' of dash takes "\302\242" and emits the cent-sign (but /bin/echo may not), but I do not think it is "any quoted string". To wit:
dash$ echo '\302\242'
¢The echo built into dash shows the cent-sign. The example does not let us tell if is the shell (i.e. the 'echo' command sees the cent-sign in its argv[1]) or if it is the command (i.e. the 'echo' sees 8-byte string "bs three zero two bs two four two" in its argv[1], and shows that as the cent-sign), though.
dash$ /bin/echo '\302\242'
\302\242This shows that shell is not doing anything fancy. /bin/echo gets the 8-byte string in its argv[1] and emits that as-is.
dash$ /bin/echo "\302\242"
\302\242Again this shows the same; I added this example to demonstrate that it is _not_ like the shell interprets the backslashed octal strings depending on how they are quoted.
dash$ printf "%s\n" '\302\242'
\302\242
dash$ printf "%s\n" "\302\242"
\302\242And these demonstrates that argv[2] given to printf in these cases are 8-byte string "bs three zero two bs two four two" and the shell is not doing anything fancy.
So, I would suggest not saying "any quoted string". In addition, even though dash's built-in echo that recognizes "\0num" seems to be conformant to what POSIX specifies (cf. [*1*]), GNU requires "-e" in order to do so in both standalone 'echo' binary and one built into 'bash', so we cannot rely on this POSIX behaviour when writing a portable script. Hence, I would recommend us to focus on giving a piece of advice on use of printf in this part of the documentation.
[References]
*1* https://pubs.opengroup.org/onlinepubs/9699919799/utilities/echo.html *2* https://www.gnu.org/software/coreutils/manual/html_node/echo-invocation.html