Hi,

On Wed, Dec 16, 2015 at 8:22 AM, Dmitrij D. Czarkoff <czark...@gmail.com> wrote:
> Hi!
>
> I recently came across a shell script that uses idiom
>
>   var1=var1
>   var2=var2
>   echo "${var1+($var2)}"
>
> ksh(1) doesn't like it:
>
>   ksh: ${var1+($var2)}": bad substitution
>
> Meanwhile bash and dash just print:
>
>   (var2)

FWIW, both "regular" ksh and ksh93 in Solaris 11.2 behave the same way
as bash and dash.

> Apparently ksh tries to parse parenthesis within substituted word.
> According to 2.2.3 Double-Quotes[1] of POSIX Shell Command Language,
> parentheses should not be parsed within double quotes, although 2.6.2
> Parameter Expansion[2] sets special rules for parameter substitution
> within double quotes, and those don't mention whether substituted word
> should be considered quoted or not.
>
> Patch below changes ksh's behavior to match that of bash and dash.  I am
> not decided on the matter.
>
> --
> Dmitrij D. Czarkoff
>
> [1] 
> http://pubs.opengroup.org/onlinepubs/9699919799/utilities/V3_chap02.html#tag_18_06_02
> [2] 
> http://pubs.opengroup.org/onlinepubs/9699919799/utilities/V3_chap02.html#tag_18_06_02
>
> Index: lex.c
> ===================================================================
> RCS file: /cvs/src/bin/ksh/lex.c,v
> retrieving revision 1.64
> diff -u -p -r1.64 lex.c
> --- lex.c       18 Nov 2015 15:31:21 -0000      1.64
> +++ lex.c       16 Dec 2015 07:05:42 -0000
> @@ -579,6 +579,15 @@ yylex(int cf)
>                         break;
>
>                 case SBRACEQ:
> +                       /*{*/
> +                       if (c == '}') {
> +                               POP_STATE();
> +                               *wp++ = CSUBST;
> +                               *wp++ = /*{*/ '}';
> +                       } else
> +                               goto Subst;
> +                       break;
> +
>                 case SBRACE:
>                         /*{*/
>                         if (c == '}') {
>


Regards.

-- 

Pablo Méndez Hernández

Reply via email to