From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 2421 invoked by alias); 14 May 2015 13:20:14 -0000 Mailing-List: contact zsh-workers-help@zsh.org; run by ezmlm Precedence: bulk X-No-Archive: yes List-Id: Zsh Workers List List-Post: List-Help: X-Seq: 35123 Received: (qmail 3901 invoked from network); 14 May 2015 13:19:55 -0000 X-Spam-Checker-Version: SpamAssassin 3.3.2 (2011-06-06) on f.primenet.com.au X-Spam-Level: X-Spam-Status: No, score=-1.9 required=5.0 tests=BAYES_00 autolearn=ham version=3.3.2 Message-ID: <55549FB2.80705@inlv.org> Date: Thu, 14 May 2015 14:14:26 +0100 From: Martijn Dekker User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.7; rv:31.0) Gecko/20100101 Thunderbird/31.2.0 MIME-Version: 1.0 To: zsh-workers@zsh.org Subject: 'case' pattern matching bug with bracket expressions Content-Type: text/plain; charset=windows-1252 Content-Transfer-Encoding: 7bit While writing a cross-platform shell library I've come across a bug in the way zsh (in POSIX mode) matches patterns in 'case' statements that are at variance with other POSIX shells. Normally, zsh considers an empty bracket expression [] a bad pattern while other shells ([d]ash, bash, ksh) consider it a negative: case abc in ( [] ) echo yes ;; ( * ) echo no ;; esac Expected output: no Got output: zsh: bad pattern: [] This is inconvenient if you want to pass such a bracket expression in a parameter or variable, e.g. ["$param"]. If the parameter or variable is empty, a 'bad pattern: []' error is produced. I'm not sure whether the above is a bug or a variance in behaviour permitted by POSIX, though of course as a writer of cross-platform shell programs I'd prefer it if zsh acted like the majority. However, I'm quite sure the following is a serious bug. The same thing does NOT produce an error, but a false positive (!), if an extra non-matching pattern with | is added: case abc in ( [] | *[!a-z]*) echo yes ;; ( * ) echo no ;; esac Expected output: no Got output: yes The above needs to be tested in a non-interactive shell (i.e. a script) due to the "!". Other shells I've tested (bash, dash, ksh, pdksh, mksh) behave as expected. I confirmed the bug in zsh 4.3.11, zsh 5.0.2 and zsh 5.0.7-dev-2. Thanks, - Martijn