[Top][All Lists]

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: $(case x in x)...

From: Eric Blake
Subject: Re: $(case x in x)...
Date: Wed, 28 Dec 2005 18:04:29 +0000

> However, who is it that is too hungry for the next ")"?:
> $ k=$(case x in x) :;; esac)
> bash: syntax error near unexpected token `;;'
> $ k=$(case x in x) :; esac)
> bash: syntax error near unexpected token `esac'
> $ k=`case x in x) :; esac`

I believe this is a bug in bash 3.0.  I have confirmed that
it still exists in bash-3.1-beta1, but have not yet tested
if bash 3.1 final patchlevel 1 has fixed the bug.  POSIX requires
that in the $(command) form, "Any valid shell script can be
used for command."

The rationale page 
then proceeds to list several examples of $() commands where
an unmatched ')' can appear inside the nested command, when used
as part of a valid shell script (although it did not list the example
of case with unmatched ')').  Furthermore, the rationale page states
under the Case Conditional Construct:

"At one time, using the leading parenthesis was required if the case
statement was to be embedded within a "$()" command substitution;
this is no longer the case with the POSIX shell."

Therefore, I read this as stating that POSIX requires your example
to succeed, and that bash has a bug (FYI, the bug also appears
in my installed versions of zsh and ksh).

Meanwhile, as a workaround, use:

$ k=$(case x in (x) :; esac)

Eric Blake

reply via email to

[Prev in Thread] Current Thread [Next in Thread]