Subject: [PATCH] Allow == as synonym for = in test
From: "David A. Wheeler" <[email-masked]>
To: [email-masked]
Date: Tue, 15 Mar 2011 19:39:09 -0400 (EDT)
List-Id: <debbugs-submit.debbugs.gnu.org>

The following trivial patch makes GNU coreutils' test recognize "=="
as a synonym for "=".  This is already the case in GNU coreutils' expr,
bash, ksh, busybox ash, FreeBSD-current /bin/sh and /bin/test, and
OpenBSD's /bin/sh.  These are only a few lines, so I don't think
any paperwork is needed.  The following implements "==" and documents it.

  --- David A. Wheeler

--- ./src/test.c.orig	2011-03-15 00:49:11.000000000 -0400
+++ ./src/test.c	2011-03-15 09:11:04.000000000 -0400
@@ -173,7 +173,8 @@
 static bool
 binop (char const *s)
 {
-  return ((STREQ (s,   "=")) || (STREQ (s,  "!=")) || (STREQ (s, "-nt")) ||
+  return ((STREQ (s,   "=")) || (STREQ (s,  "!=")) || (STREQ (s, "==")) ||
+          (STREQ (s,   "-nt")) ||
           (STREQ (s, "-ot")) || (STREQ (s, "-ef")) || (STREQ (s, "-eq")) ||
           (STREQ (s, "-ne")) || (STREQ (s, "-lt")) || (STREQ (s, "-le")) ||
           (STREQ (s, "-gt")) || (STREQ (s, "-ge")));
@@ -360,7 +361,8 @@
       test_syntax_error (_("unknown binary operator"), argv[op]);
     }
 
-  if (argv[op][0] == '=' && !argv[op][1])
+  if (argv[op][0] == '=' && (!argv[op][1] ||
+       ((argv[op][1] == '=') && !argv[op][2])))
     {
       bool value = STREQ (argv[pos], argv[pos + 2]);
       pos += 3;

--- ./doc/coreutils.texi.orig	2011-03-15 00:49:10.000000000 -0400
+++ ./doc/coreutils.texi	2011-03-15 20:10:44.000000000 -0400
@@ -11535,7 +11535,7 @@
 * File type tests::             -[bcdfhLpSt]
 * Access permission tests::     -[gkruwxOG]
 * File characteristic tests::   -e -s -nt -ot -ef
-* String tests::                -z -n = !=
+* String tests::                -z -n = == !=
 * Numeric tests::               -eq -ne -lt -le -gt -ge
 * Connectives for test::        ! -a -o
 @end menu
@@ -11726,6 +11726,11 @@
 @cindex equal string check
 True if the strings are equal.
 
+@item @var{string1} == @var{string2}
+@opindex ==
+@cindex equal string check
+True if the strings are equal (synonym for =).
+
 @item @var{string1} != @var{string2}
 @opindex !=
 @cindex not-equal string check