diff --git a/Userland/Shell/Parser.cpp b/Userland/Shell/Parser.cpp index b56c599b64..bc98b3f25e 100644 --- a/Userland/Shell/Parser.cpp +++ b/Userland/Shell/Parser.cpp @@ -1166,8 +1166,10 @@ RefPtr Parser::parse_expression() if (auto immediate = parse_immediate_expression()) return read_concat(immediate.release_nonnull()); - if (auto inline_exec = parse_evaluate()) + auto inline_exec = parse_evaluate(); + if (inline_exec && !inline_exec->is_syntax_error()) return read_concat(inline_exec.release_nonnull()); + return inline_exec; } if (starting_char == '#') diff --git a/Userland/Shell/Parser.h b/Userland/Shell/Parser.h index 37aac4097f..003267f968 100644 --- a/Userland/Shell/Parser.h +++ b/Userland/Shell/Parser.h @@ -251,7 +251,7 @@ expression :: evaluate expression? | '(' list_expression ')' expression? evaluate :: '$' '(' pipe_sequence ')' - | '$' expression {eval / dynamic resolve} + | '$' [lookahead != '('] expression {eval / dynamic resolve} string_composite :: string string_composite? | variable string_composite?