amos@instable.UUCP (02/24/87)
Index: <source directory>/<source file> 4.2BSD Description: Expr doesn't recognize negative numbers as numeric arguments, except as the 1st argument to a relational operation (this is even more bogous, since non-numeric arguments are compared lexically, without warning). Repeat-By: Try: expr -1 + 2; or expr -1 \> -01 This is most annoying when expr-ing the output of another expr. Fix: Apply the following patch. (This is from the vanilla 4.3 sources, but other versions - maybe even sysV? - are similar). *** /usr/src/bin/expr.y Mon Mar 3 16:42:15 1986 --- /tmp/expr.y Tue Feb 24 16:30:24 1987 *************** *** 94,100 char *rel(op, r1, r2) register char *r1, *r2; { register long i; ! if(ematch(r1, "-*[0-9]*$") && ematch(r2, "-*[0-9]*$")) i = atol(r1) - atol(r2); else i = strcmp(r1, r2); --- 94,100 ----- char *rel(op, r1, r2) register char *r1, *r2; { register long i; ! if(ematch(r1, "-*[0-9]*$") && ematch(r2, "[0-9]*$")) i = atol(r1) - atol(r2); else i = strcmp(r1, r2); *************** *** 113,119 long i1, i2; register char *rv; ! if(!(ematch(r1, "-*[0-9]*$") && ematch(r2, "-*[0-9]*$"))) yyerror("non-numeric argument"); i1 = atol(r1); i2 = atol(r2); --- 113,119 ----- long i1, i2; register char *rv; ! if(!(ematch(r1, "[0-9]*$") && ematch(r2, "[0-9]*$"))) yyerror("non-numeric argument"); i1 = atol(r1); i2 = atol(r2); -- Amos Shapir National Semiconductor (Israel) 6 Maskit st. P.O.B. 3007, Herzlia 46104, Israel (011-972) 52-522261 amos%nsta@nsc.com 34.48'E 32.10'N
amos@instable.UUCP (02/25/87)
Sorry, the Index line slipped by me in my previous posting. It is, of course: Index: /usr/src/bin/expr.y -- Amos Shapir National Semiconductor (Israel) 6 Maskit st. P.O.B. 3007, Herzlia 46104, Israel (011-972) 52-522261 amos%nsta@nsc.com 34.48'E 32.10'N