bug-bash
[Top][All Lists]
Advanced

[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
(http://www.opengroup.org/onlinepubs/009695399/utilities/xcu_chap02.html#tag_02_06_03)
that in the $(command) form, "Any valid shell script can be
used for command."

The rationale page 
(http://www.opengroup.org/onlinepubs/009695399/xrat/xcu_chap02.html)
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]