Zsh Mailing List Archive
Messages sorted by: Reverse Date, Date, Thread, Author

Re: Suggested "case" syntax extension

On Jul 9,  2:33am, Zoltan Hidvegi wrote:
> Subject: Re: Suggested "case" syntax extension
> > Newer versions of ksh allow an optional '(' before each pattern in a case
> > statement, complementary to the mandatory ')' following the pattern.  As
> > well as being esthetically symmetric, this also facilitates verifying that
> > a shell script has balanced parentheses (e.g. with the '%' command in vi).
> >
> > It seems that zsh still recognizes only the classic Bourne shell syntax for
> > "case", with the ')' but no optional '('.  Considering all the syntactic
> > variation zsh supports, it would be quite reasonable for zsh to allow a
> > leading '(', thereby enhancing compatibility with ksh scripts.  Although
> > I have not looked into the zsh source, I imagine this should not pose an
> > implementation problem.
> Zsh accepts an optional leading '(' since 2.6-beta21.  POSIX 1003.2
> requires this.  It also allows us to use case sttement in $(...) command
> substitutions (of course even a normal case should work in a command
> substitution but the zsh implementation requires ballanced parentheses like
> bash and pdksh).
> Zsh is not completely ksh compatible here since due to the enhanced glob
> pattern syntax recognized by zsh if there is a leading '(' the closing ')'
> must be delimited with a blank from the command following that.  So
> case foo in
> (f*)echo yes;;
> (*)echo no;;
> esac
> does not work in zsh but
> case foo in
> (f*) echo yes;;
> (*) echo no;;
> esac
> works.
> Zoltan
>-- End of excerpt from Zoltan Hidvegi

I'm glad to learn this has already been implemented.  (The last time I tried it
was with 2.6-beta20, I believe.)  However, I double-checked in the zsh-3.0-pre2
distribution, and both man/man1/zshmisc.1 and Doc/zshmisc.man lack any mention
of an optional leading '('.  This should be fairly easy to remedy.

-- Morrie Siegel

Messages sorted by: Reverse Date, Date, Thread, Author