From 5ddabb8348165b7bdd1385288a17937bbda76743 Mon Sep 17 00:00:00 2001 From: Jilles Tjoelker Date: Sat, 12 Jul 2014 10:27:30 +0000 Subject: [PATCH] sh: Consistently treat ${01} like $1. Leading zeroes were ignored when checking whether a positional parameter is set, but not when expanding its value. Ignore leading zeroes in any case. --- bin/sh/expand.c | 13 ++++++------- bin/sh/tests/parameters/Makefile | 1 + bin/sh/tests/parameters/positional4.0 | 4 ++++ 3 files changed, 11 insertions(+), 7 deletions(-) create mode 100644 bin/sh/tests/parameters/positional4.0 diff --git a/bin/sh/expand.c b/bin/sh/expand.c index a126ca60a6d..b8ef5ea1b67 100644 --- a/bin/sh/expand.c +++ b/bin/sh/expand.c @@ -928,17 +928,16 @@ numvar: STPUTC(sep, expdest); } break; - case '0': - p = arg0; - strtodest(p, flag, subtype, quoted); - break; default: if (is_digit(*name)) { num = atoi(name); - if (num > 0 && num <= shellparam.nparam) { + if (num == 0) + p = arg0; + else if (num > 0 && num <= shellparam.nparam) p = shellparam.p[num - 1]; - strtodest(p, flag, subtype, quoted); - } + else + break; + strtodest(p, flag, subtype, quoted); } break; } diff --git a/bin/sh/tests/parameters/Makefile b/bin/sh/tests/parameters/Makefile index 4f9ae31ce3b..25742263e82 100644 --- a/bin/sh/tests/parameters/Makefile +++ b/bin/sh/tests/parameters/Makefile @@ -14,6 +14,7 @@ FILES+= optind2.0 FILES+= positional1.0 FILES+= positional2.0 FILES+= positional3.0 +FILES+= positional4.0 FILES+= pwd1.0 FILES+= pwd2.0 diff --git a/bin/sh/tests/parameters/positional4.0 b/bin/sh/tests/parameters/positional4.0 new file mode 100644 index 00000000000..c1c380c0fea --- /dev/null +++ b/bin/sh/tests/parameters/positional4.0 @@ -0,0 +1,4 @@ +# $FreeBSD$ + +set -- "x$0" 2 3 4 5 6 7 8 9 "y$0" +[ "${01}.${010}" = "$1.${10}" ]