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