Subject: bin/23817: sh allows empty LHS to short-circuit operators
To: None <gnats-bugs@gnats.netbsd.org>
From: None <vax@carolina.rr.com>
List: netbsd-bugs
Date: 12/21/2003 01:38:58
>Number:         23817
>Category:       bin
>Synopsis:       sh allows empty LHS to short-circuit operators
>Confidential:   no
>Severity:       non-critical
>Priority:       low
>Responsible:    bin-bug-people
>State:          open
>Class:          doc-bug
>Submitter-Id:   net
>Arrival-Date:   Sun Dec 21 06:54:00 UTC 2003
>Closed-Date:
>Last-Modified:
>Originator:     VaX#n8
>Release:        NetBSD 1.5.1
>Organization:
	
>Environment:
	

>Description:
	

$ && echo hi
hi
$ 

>How-To-Repeat:
	
>Fix:
	
I just want to document this behavior first, before I try fixing things.
I think this should be a syntax error (it is in BASH).  This patch is
dependent on one I just sent in a few hours ago, but is simple.  I found
this error when I was trying to continue lines in an if conditional
expression...

After looking at the code, it's not surprising to me that ash's parser has
some dark corners.

--- sh.1~	Sun Dec 21 01:28:36 2003
+++ sh.1	Sun Dec 21 01:30:39 2003
@@ -581,6 +581,9 @@
 echoes
 .Dq baz
 and nothing else.  This is not the way it works in C.
+Also, if you forget the left-hand side (for example when continuing lines but
+forgetting to use a backslash) it defaults to a true statement.  This behavior
+is not useful and should not be relied upon.
 .Ss Flow-Control Constructs -- if, while, for, case
 The syntax of the if command is
 .Bd -literal -offset indent
>Release-Note:
>Audit-Trail:
>Unformatted: