Ack. Thanks for the info and corrections. jon. On 23/09/2010, at 5:15, Junio C Hamano <gitster@xxxxxxxxx> wrote: > Ramsay Jones <ramsay@xxxxxxxxxxxxxxxxxxx> writes: > >> On systems which have dash as /bin/sh, such as Ubuntu, the final >> test (master@{n} for various n) fails with a syntax error while >> processing an arithmetic expansion. The syntax error is caused by >> using a bare name ('N') as a variable reference in the expression. >> >> In order to avoid the syntax error, we spell the variable reference >> as '$N' rather than simply 'N'. >> >> Signed-off-by: Ramsay Jones <ramsay@xxxxxxxxxxxxxxxxxxx> > > Thanks. > > POSIX wants shells to support both "N" and "$N" and requires them to yield > the same answer to $((N)) and $(($N)), but we should aim for portability > in a case like this, especially when the price we pay to do so is so > small, i.e. a few extra dollars. > > By the way, on my box, I get this: > > $ ls l /bin/dash > -rwxr-xr-x 1 root root 104024 2008-08-26 02:36 /bin/dash* > $ dpkg -l dash | grep '^ii' > ii dash 0.5.4-12 POSIX-compliant shell > $ /bin/dash -c 'N=20 ; echo $(( N + 3 ))' > 23 > > I just left it vague by saying "e.g. older dash" in below, but we may want > to be more precise in the documentation. > > -- >8 -- > CodingGuidelines: spell Arithmetic Expansion with $(($var)) > > Signed-off-by: Junio C Hamano <gitster@xxxxxxxxx> > --- > Documentation/CodingGuidelines | 4 ++++ > 1 files changed, 4 insertions(+), 0 deletions(-) > > diff --git a/Documentation/CodingGuidelines b/Documentation/CodingGuidelines > index b8bf618..2cdd76f 100644 > --- a/Documentation/CodingGuidelines > +++ b/Documentation/CodingGuidelines > @@ -43,6 +43,10 @@ For shell scripts specifically (not exhaustive): > > - We use Arithmetic Expansion $(( ... )). > > + - Inside Arithmetic Expansion, spell shell variables with $ in front > + of them, as some shells do not grok $((x)) while accepting $(($x)) > + just fine (e.g. older dash). > + > - No "Substring Expansion" ${parameter:offset:length}. > > - No shell arrays. -- To unsubscribe from this list: send the line "unsubscribe git" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html