Mailing-List: contact zsh-workers-help@zsh.org; run by ezmlm
Precedence: bulk
X-No-Archive: yes
List-Id: Zsh Workers List <zsh-workers.zsh.org>
List-Post: <mailto:zsh-workers@zsh.org>
List-Help: <mailto:zsh-workers-help@zsh.org>
X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on f.primenet.com.au
X-Spam-Level: 
X-Spam-Status: No, score=-1.9 required=5.0 tests=BAYES_00,FREEMAIL_FROM,
	T_DKIM_INVALID autolearn=ham autolearn_force=no version=3.4.0
DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=inbox.ru; s=mail;
	h=Content-Transfer-Encoding:Content-Type:MIME-Version:Message-ID:Subject:To:From:Date; bh=a52cN7ZzdShKVTUmyBXrJsQFd1x3apqnZ9DW7F9/kQ4=;
	b=SS0vXAmUrlH10ieOP6fLjzK/6nfdqpKHbMNgpFIigQ2YM1sYNXq3MkVuvL8iALdyvgpug/+3O3QhiD9BiyOHKa0F/eUnhFmUTdl9Y3ZfvzhmLClklS9MwdYE5vnvOMtMwBWn24kvh++ObDGxiXDBu3ZtAOEIDkW3TRYfE0TJR0U=;
Date: Wed, 20 Jan 2016 22:06:14 +0100
From: Trek <trek00@inbox.ru>
To: zsh-workers@zsh.org
Subject: test is not posix
Message-ID: <20160120220614.18fe6683@enterprise>
X-Mailer: Claws Mail 3.11.1 (GTK+ 2.24.25; x86_64-pc-linux-gnu)
MIME-Version: 1.0
Content-Type: text/plain; charset=US-ASCII
Content-Transfer-Encoding: 7bit
X-Mras: Ok
X-Seq: zsh-workers 37709

the -n and -z options of the test utility are not posixly correct if the
argument is "!", "(", ")" or "-a"

with a posix shell:

  $ sh -c 'test -n "!" && echo ok'
  ok

with zsh called as sh:

  $ zsh/sh -c 'test -n "!" && echo ok'
  zsh:test:1: too many arguments

a workaround exist:

  $ zsh/sh -c 'test "X!" != "X" && echo ok'
  ok

but the posix standard requires -n and -z to be safe even if the
argument is '!' or '(':

  The two commands: test "$1" and test ! "$1" could not be used reliably
  on some historical systems. Unexpected results would occur if such a
  string expression were used and $1 expanded to '!', '(', or a known
  unary primary. Better constructs are: test -n "$1" and test -z "$1"
  respectively. 

http://pubs.opengroup.org/onlinepubs/9699919799/utilities/test.html#tag_20_128_16


I discovered this bug developing a small shell library, where you can
find an use case in the n_str_set function of the lib/str.sh file
included in http://www.trek.eu.org/devel/naive/naive-0.0.2.tar.gz

c-ya!

