Matt Sporleder <msporle...@gmail.com> writes: >> On Mar 13, 2016, at 8:36 AM, Aleksej Saushev <a...@inbox.ru> wrote: >> >> Robert Elz <k...@munnari.oz.au> writes: >> >>> Currently, NetBSD's /bin/sh (all versions since $(( )) was added, back >>> in 1994 it seems) calculate the result of >>> >>> x && y >>> >>> as 0 if x == 0, otherwise y, and calculate >>> >>> x || y >>> >>> as x if x != 0, and as y otherwise. >>> >>> That is, 3 && 4 evaluates to 4, and 3 || 4 evaluates to 3. >>> >>> In C, these operators always produce 1 or 0 (true or false), regardless >>> of the values of the operands. >>> >>> So does every other shell I can find to test. >>> >>> I have just submitted PR bin/50960 about this issue (and it would probably >>> be better if you replied to that PR, rather than this e-mail). >>> >>> I have a fix, it is trivial, but I don't want to implement if someone >>> in the NetBSD community (or more importantly, something in the system) is >>> relying upon this odd behaviour. >> >> It is not odd, it follows well-established long-standing tradition that >> is reflected in, e.g.: >> >> "AND evaluates each [expression] until a value of NIL is found or the >> end of the list is encountered. If a non-NIL value is the last value it >> is returned, or NIL is returned." >> >> "...expressions which are evaluated in order of their appearance. When >> one is found to be non-NIL it is returned as the value of OR. If all are >> NIL, NIL is returned." >> (The Standard Lisp Report, ca. 1982) >> >> "If all forms but the last evaluate to true values, <<and>> returns the >> results produced by evaluating the last form." >> >> "If the evaluation of any form other than the last returns a primary >> value that is true, <<or>> immediately returns that value..." >> (Common Lisp HyperSpec, 1996) >> >> "If every form but the last evaluates to a non-nil value, <<and>> returns >> whatever the last form returns." >> >> "If any form other than the last evaluates to something other than nil, >> <<or>> immediately returns that non-nil value without evaluating the >> remaining forms." >> (Common Lisp the Language, 2nd ed., 1994) >> >> "The <test> expressions are evaluated from left to right, and the value >> of the first expression that evaluates to a false value (see [Booleans]) >> is returned. Any remaining expressions are not evaluated. If all the >> expressions evaluate to true values, the value of the last expression is >> returned." >> >> "The <test> expressions are evaluated from left to right, and the value >> of the first expression that evaluates to a true value (see [Booleans]) >> is returned." >> (Revised^4 Report on Scheme, 1991) >> >> I don't have earlier references at hand. > > Is $(( )) lisp mode or arithmetic mode?
Are "&&" and "||" arithmetic expressions or ones of more general kind? -- HE CE3OH...