diff -ur mksh.orig/check.t mksh/check.t --- mksh.orig/check.t 2020-10-31 04:53:30.000000000 +0100 +++ mksh/check.t 2021-01-18 19:12:47.413180226 +0100 @@ -2484,7 +2484,7 @@ !bc +bc ,bc 0bc 1bc ^bc cbc !bc +bc ,bc -bc 0bc 1bc ^bc cbc abc bbc - ^bc abc bbc + !bc +bc ,bc -bc 0bc 1bc ^bc cbc +bc ,bc -bc -bc 0bc 1bc --- diff -ur mksh.orig/eval.c mksh/eval.c --- mksh.orig/eval.c 2020-05-05 23:34:54.000000000 +0200 +++ mksh/eval.c 2021-01-18 19:12:47.411180226 +0100 @@ -1108,6 +1108,7 @@ switch (ord(c)) { case ORD('['): case ORD('!'): + case ORD(NOT2): case ORD('-'): case ORD(']'): /* diff -ur mksh.orig/misc.c mksh/misc.c --- mksh.orig/misc.c 2020-08-27 21:53:12.000000000 +0200 +++ mksh/misc.c 2021-01-18 19:12:47.411180226 +0100 @@ -1018,7 +1018,7 @@ char *subp; /* check for negation */ - if (ISMAGIC(p[0]) && ord(p[1]) == ORD('!')) { + if (ISMAGIC(p[0]) && (ord(p[1]) == ORD('!') || ord(p[1]) == ORD(NOT2))) { p += 2; negated = true; } diff -ur mksh.orig/sh.h mksh/sh.h --- mksh.orig/sh.h 2020-10-31 04:53:33.000000000 +0100 +++ mksh/sh.h 2021-01-18 19:12:47.412180226 +0100 @@ -580,6 +580,7 @@ */ #define MAGIC KSH_BEL /* prefix for *?[!{,} during expand */ #define ISMAGIC(c) (ord(c) == ORD(MAGIC)) +#define NOT2 '^' EXTERN const char *safe_prompt; /* safe prompt if PS1 substitution fails */ Only in mksh: sh.h.orig