diff -ur mksh-56.orig/eval.c mksh-56/eval.c --- mksh-56.orig/eval.c 2017-08-12 22:10:26.321676398 +0200 +++ mksh-56/eval.c 2017-08-12 22:40:32.672676143 +0200 @@ -1005,6 +1005,7 @@ switch (ord(c)) { case ORD('['): case ORD('!'): + case ORD(NOT2): case ORD('-'): case ORD(']'): /* diff -ur mksh-56.orig/misc.c mksh-56/misc.c --- mksh-56.orig/misc.c 2017-08-12 22:10:26.321676398 +0200 +++ mksh-56/misc.c 2017-08-12 22:40:32.672676143 +0200 @@ -966,7 +966,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-56.orig/sh.h mksh-56/sh.h --- mksh-56.orig/sh.h 2017-08-12 22:10:26.325009789 +0200 +++ mksh-56/sh.h 2017-08-12 22:40:32.696009488 +0200 @@ -550,6 +550,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 */ diff -ur mksh-56.orig/check.t mksh-56/check.t --- mksh-56.orig/check.t 2017-08-12 22:10:26.321676398 +0200 +++ mksh-56/check.t 2017-08-12 22:41:46.886083258 +0200 @@ -2438,7 +2438,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 ---