From owner-freebsd-hackers Mon Mar 6 0:24:55 2000 Delivered-To: freebsd-hackers@freebsd.org Received: from knight.cons.org (knight.cons.org [194.233.237.86]) by hub.freebsd.org (Postfix) with ESMTP id 7D3F937BCA3 for ; Mon, 6 Mar 2000 00:24:47 -0800 (PST) (envelope-from cracauer@knight.cons.org) Received: (from cracauer@localhost) by knight.cons.org (8.9.3/8.9.3) id JAA14758; Mon, 6 Mar 2000 09:23:23 +0100 (CET) Date: Mon, 6 Mar 2000 09:23:22 +0100 From: Martin Cracauer To: Max Khon Cc: Martin Cracauer , John Polstra , Doug@gorean.org, hackers@FreeBSD.ORG Subject: Re: empty lists in for (/bin/sh) Message-ID: <20000306092322.A14710@cons.org> References: <20000306084031.A35426@cons.org> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii X-Mailer: Mutt 1.0i In-Reply-To: ; from fjoe@iclub.nsu.ru on Mon, Mar 06, 2000 at 02:09:16PM +0600 Sender: owner-freebsd-hackers@FreeBSD.ORG Precedence: bulk X-Loop: FreeBSD.ORG In , Max Khon wrote: > hi, there! > > On Mon, 6 Mar 2000, Martin Cracauer wrote: > > > I just checked POSIX 1003.2. > > > > for name [ in word ] > > do > > compound-list > > done > > > > "First, the list of words following 'in' shall be expanded to generate > > a list of items." [...] "If no items result from the expansion, the > > compound-list shall not be executed." > > > > is not a word at all, so it can't be expanded, so I think > > bash is corrent to complain about a syntax error. > > > > It is clear, though, that your (John) example "variable expansion to > > nothing" is not an error and both shells do it right. > > A lot of stuff in /usr/ports/Mk/bsd.port.mk depends on current /bin/sh > behaviour ("do nothing" instead of "complain and bail out"). > I am the original poster and faced this problem when tried to port FreeBSD > Ports subsystem to Solaris and Linux. Hm, for s in ${SUBDIR}; do Well, the trick here is that ${SUBDIR} is expanded by make, not sh, so sh can end up with nothing. Max, I apologize, your point is valid and I commented without seeing your original message. OK, I think we should leave the non-word syntax as valid in FreeBSD, since it makes the ports case more elegant and POSIX make it that clear that sh must raise an error. Max, I think the best way to port the ports subsystem is to take FreeBSD's sh with you and point ${SH} to it, not the system's native sh. Many native sh's have other things they do different from FreeBSD's sh and bash (i.e. reaction on SIGINT, see http://www.cons.org/cracauer/sigint.html), so I think this will shorten your path considerably. Martin -- %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% Martin Cracauer http://www.cons.org/cracauer/ Tel.: (private) +4940 5221829 Fax.: (private) +4940 5228536 To Unsubscribe: send mail to majordomo@FreeBSD.org with "unsubscribe freebsd-hackers" in the body of the message