2023年5月24日(水) 22:27 Chet Ramey <chet.ra...@case.edu>:
> > [...]
>
> Thanks for testing it.

Thank you for all the explanations and clarifications.

> Both are valid, but don't get too fond of ${(command)} -- I'm going to
> remove it in favor of people using ${ (command); } if they want a subshell.

Does that mean ${(command)} would be explicitly unsupported even
though {(command)} is allowed for the brace grouping? Would other
cases without semicolons, such as ${ if ...; then ...; fi }, also be
going to be removed?

> > Then, can I understand the grammar in the following way?  First, there
> > are two types of nofork command substitutions:
> >
> >    ${ compound_list }
> >    ${| compound_list }
> >
> > where `compound_list' is what is defined by EBNF in POSIX XCU 2.10.2.
>
> You could always look at the shell grammar:
>
> [...]
>
> funsub:         DOLBRACE compound_list '}'
>                          {
>                            $$ = $2;
>                          }
>          |       DOLBRACE newline_list '}'
>                          {
>                            $$ = (COMMAND *)NULL;
>                          }

OK, I haven't checked the grammar definition in the source code. I now
looked into parse.y, but it doesn't seem to be so clear to me what
would be the distinction among the variations of C = <space>, <tab>,
<newline>, `(', and `|' for `${C command; }' just by looking at the
definition. It seems to be processed on subst.c:6880 semantically.
Anyway, I'm satisfied now.

Thank you.

--
Koichi

Reply via email to