Yeah. I noted that as workaround in the report... I figured if posix was
vague on this matching other shells might be better behavior.
On Jun 28, 2015 2:57 PM, "Dennis Williamson" <dennistwilliam...@gmail.com>
wrote:

>
>
> On Sat, Jun 27, 2015 at 2:48 PM, Nathan Neulinger <nn...@neulinger.org>
> wrote:
>
>> Configuration Information [Automatically generated, do not change]:
>> Machine: x86_64
>> OS: linux-gnu
>> Compiler: gcc
>> Compilation CFLAGS:  -DPROGRAM='bash' -DCONF_HOSTTYPE='x86_64'
>> -DCONF_OSTYPE='linux-gnu' -DCONF_MACHTYPE='x86_64-redhat-linux-gnu'
>> -DCONF_VENDOR='redhat' -DLOCALEDIR='/usr/share/locale' -DPACKAGE='bash'
>> -DSHELL -DHAVE_CONFIG_H   -I.  -I. -I./include -I./lib  -D_GNU_SOURCE
>> -DRECYCLES_PIDS -DDEFAULT_PATH_VALUE='/usr/local/bin:/usr/bin'  -O2 -g
>> -pipe -Wall -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2 -fexceptions
>> -fstack-protector-strong --param=ssp-buffer-size=4 -grecord-gcc-switches
>> -m64 -mtune=generic
>> uname output: Linux skyhawk.home.neulinger.org 3.19.3-200.fc21.x86_64 #1
>> SMP Thu Mar 26 21:39:42 UTC 2015 x86_64 x86_64 x86_64 GNU/Linux
>> Machine Type: x86_64-redhat-linux-gnu
>>
>> Bash Version: 4.3
>> Patch Level: 39
>> Release Status: release
>>
>> Description:
>>
>>         If $() includes a case statement nested within it, the parser is
>> not matching ) as closing the case,
>>         but rather the $(. This behavior is different between bash and
>> other shells. ksh/busybox
>>         both process this without error, but I do not know which is
>> officially "correct".
>>
>>         Test Case:
>> ---------------
>> testing=$(
>>     echo test | while read line; do
>>         case $line in
>>              test)  echo saw test ;;
>>              *)     echo other ;;
>>         esac
>>     done
>> )
>>
>> echo result: $testing
>> --------------
>>
>>         Expected output:
>>
>> result: saw test
>>
>>         Actual output:
>>
>> parse-bug.sh: line 6: syntax error near unexpected token `;;'
>> parse-bug.sh: line 6: `         test)  echo saw test ;;'
>>
>>
>>         Workaround:  Use (test) instead of test) in the nested code
>>
>>
>> Repeat-By:
>>         Run script with that syntax.
>>
>>
>>
>> --
>> ------------------------------------------------------------
>> Nathan Neulinger                       nn...@neulinger.org
>> Neulinger Consulting                   (573) 612-1412
>>
>>
>
> You can use the full syntax of case by surrounding the cases with both
> opening and closing parentheses:
>
> testing=$(
>     echo test | while read line; do
>         case $line in
>              (test)  echo saw test ;;
>              (*)     echo other ;;
>         esac
>     done
> )
>
> POSIX shows the opening parentheses as optional, but does not describe
> their use or when they might be necessary.
>
>
> http://pubs.opengroup.org/onlinepubs/9699919799/utilities/V3_chap02.html#tag_18_09_04
>
> --
> Visit serverfault.com to get your system administration questions
> answered.
>

Reply via email to