diff --git a/Userland/Utilities/test.cpp b/Userland/Utilities/test.cpp index 0cf039e135..9772803cf1 100644 --- a/Userland/Utilities/test.cpp +++ b/Userland/Utilities/test.cpp @@ -356,15 +356,6 @@ static OwnPtr parse_simple_expression(char* argv[]) fatal_error("Unmatched \033[1m("); } - if (arg == "!") { - if (should_treat_expression_as_single_string(argv[optind])) - return make(move(arg), "", StringCompare::NotEqual); - auto command = parse_complex_expression(argv); - if (!command) - fatal_error("Expected an expression after \033[1m!"); - return make(command.release_nonnull()); - } - // Try to read a unary op. if (arg.starts_with('-') && arg.length() == 2) { optind++; @@ -464,6 +455,17 @@ static OwnPtr parse_simple_expression(char* argv[]) --optind; return make("", lhs, StringCompare::NotEqual); } else { + // Now that we know it's not a well-formed expression, see if it's actually a negation + if (lhs == "!") { + if (should_treat_expression_as_single_string(arg)) + return make(move(lhs), "", StringCompare::NotEqual); + + auto command = parse_complex_expression(argv); + if (!command) + fatal_error("Expected an expression after \x1b[1m!"); + + return make(command.release_nonnull()); + } --optind; return make("", lhs, StringCompare::NotEqual); }