É essencialmente um erro genérico de sintaxe, não especificamente relacionado ao token ls
. bash
usa um analisador yacc, que chama um yyerror()
comum em qualquer problema. Dentro do tratamento de erros resultante, ele tenta localizar o erro. A mensagem está vindo deste pedaço (veja source ):
/* If the line of input we're reading is not null, try to find the
objectionable token. First, try to figure out what token the
parser's complaining about by looking at current_token. */
if (current_token != 0 && EOF_Reached == 0 && (msg = error_token_from_token (current_token)))
{
if (ansic_shouldquote (msg))
{
p = ansic_quote (msg, 0, NULL);
free (msg);
msg = p;
}
parser_error (line_number, _("syntax error near unexpected token '%s'"), msg);
free (msg);
if (interactive == 0)
print_offending_line ();
last_command_exit_value = parse_and_execute_level ? EX_BADSYNTAX : EX_BADUSAGE;
return;
}
Em outras palavras, ele já está confuso com o '('
e, se o contexto tiver sido visto com antecedência, está relatando o ls
.
Um (
seria legal no início de um comando, mas não incorporado. Por página de manual:
Compound Commands
A compound command is one of the following:
(list) list is executed in a subshell environment (see COMMAND EXECU‐
TION ENVIRONMENT below). Variable assignments and builtin com‐
mands that affect the shell's environment do not remain in
effect after the command completes. The return status is the
exit status of list.
Leitura adicional:
- 3.2.4.3 Comandos de agrupamento (Manual de Referência do Bash )
- 3.5.4 Substituição de Comando (Manual de Referência do Bash )