Pablo Méndez Hernández said:
> 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.
>>
>> [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

ping

>> 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 == '}') {
>>

-- 
Dmitrij D. Czarkoff

Reply via email to