One of the git tests fails. I have reduced the failure to a small test case: ---------------------------------------- #!/bin/sh func() { n=$1; shift echo "$n 1 <$1>" echo "$n 2 <$2>" } p="--foo --bar" func bare $p func quoted "$p" func alt "alt ${p:+$p}" ---------------------------------------- I get results (netbsd-5, i386) sh: ---------------------------------------- bare 1 <--foo> bare 2 <--bar> quoted 1 <--foo --bar> quoted 2 <> alt 1 <alt --foo> alt 2 <--bar> ---------------------------------------- bash: ---------------------------------------- bare 1 <--foo> bare 2 <--bar> quoted 1 <--foo --bar> quoted 2 <> alt 1 <alt --foo --bar> alt 2 <> ---------------------------------------- ksh: ---------------------------------------- bare 1 <--foo> bare 2 <--bar> quoted 1 <--foo --bar> quoted 2 <> alt 1 <alt --foo --bar> alt 2 <> ---------------------------------------- and obviously the Linux shells do not split the contents of $p, because the git tests must pass there. POSIX requires that field splitting not be done on the results of substitutions in "": http://pubs.opengroup.org/onlinepubs/9699919799/utilities/V3_chap02.html#tag_18_06_02 so I think our sh is wrong. (git's test is constructing a human-readable string explaining the arguments passed to the test, so it is doing essentially like the 'alt' line above, but with extra text: "....is valid${2:+ with options $2}".)
Attachment:
pgpF26yfDQ7ZG.pgp
Description: PGP signature