diff --git a/src/parse_util.cpp b/src/parse_util.cpp index 6d4d3f5a7..aa909b1ce 100644 --- a/src/parse_util.cpp +++ b/src/parse_util.cpp @@ -1195,9 +1195,10 @@ static bool detect_errors_in_plain_statement(const wcstring &buff_src, // Check that we don't do an invalid builtin (issue #1252). if (!errored && decoration == parse_statement_decoration_builtin && - !builtin_exists(command)) { + expand_one(*unexp_command, 0, null_environment_t{}, parse_errors) && + !builtin_exists(*unexp_command)) { errored = append_syntax_error(parse_errors, source_start, UNKNOWN_BUILTIN_ERR_MSG, - command.c_str()); + unexp_command->c_str()); } } return errored; diff --git a/tests/vars_as_commands.in b/tests/vars_as_commands.in index 93d299454..3b73c9f00 100644 --- a/tests/vars_as_commands.in +++ b/tests/vars_as_commands.in @@ -9,6 +9,9 @@ $CMD1 set CMD2 echo '(' not expanded again $CMD2 +# Test using variables with the builtin decorator +builtin $CMD1 + # Test implicit cd set CMD3 /usr/bin $CMD3 && echo $PWD diff --git a/tests/vars_as_commands.out b/tests/vars_as_commands.out index 6f59b82a7..64e4976b7 100644 --- a/tests/vars_as_commands.out +++ b/tests/vars_as_commands.out @@ -1,3 +1,4 @@ basic command as variable ( not expanded again +basic command as variable /usr/bin