RE: [PATCH 2/6] CodingGuidelines: quote assigned value in 'local var=$val'
- From
rsbecker@nexbridge.com <rsbecker@nexbridge.com>
- Date
- Apr 6, 2024, 01:29 UTC
- Message-ID
- <02c801da87c1$eac025f0$c04071d0$@nexbridge.com>
- In-Reply-To
- <20240406000902.3082301-3-gitster@pobox.com>
On Friday, April 5, 2024 8:09 PM, Junio C Hamano wrote:
>Dash bug https://bugs.launchpad.net/ubuntu/+source/dash/+bug/139097 >lets the shell erroneously perform field splitting on the expansion of a
command
>substitution during declaration of a local or an extern variable. > >The explanation was stolen from ebee5580 (parallel-checkout: avoid dash
local bug
Show 8 quoted lines
>in tests, 2021-06-06). > >Signed-off-by: Junio C Hamano <gitster@pobox.com> >--- > Documentation/CodingGuidelines | 14 ++++++++++++++ > 1 file changed, 14 insertions(+) > >diff --git a/Documentation/CodingGuidelines
b/Documentation/CodingGuidelines
Show 24 quoted lines
>index 0a39205c48..1cb77a871b 100644 >--- a/Documentation/CodingGuidelines >+++ b/Documentation/CodingGuidelines >@@ -194,6 +194,20 @@ For shell scripts specifically (not exhaustive): > have changed since then. We'd need to re-evaluate this rule, > together with the rule in t/check-non-portable-shell.pl script. > >+ - Some versions of dash have broken variable assignment when prefixed >+ with "local", "export", and "readonly", in that the value to be >+ assigned goes through field splitting at $IFS unless quoted. >+ >+ DO NOT write: >+ >+ local variable=$value ;# wrong >+ local variable=$(command args) ;# wrong >+ >+ and instead write: >+ >+ local variable="$value" >+ local variable="$(command args)" >+ > - Use octal escape sequences (e.g. "\302\242"), not hexadecimal (e.g. > "\xc2\xa2") in printf format strings, since hexadecimal escape > sequences are not portable.
I can confirm, at least for the set of platforms I work on, that printf with hex values is definitely not portable. --Randall